字符串返回数组并排序(算法题)

今天在微信群里看到有人抛出这么一道题:

string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"
#要求返回一个ip数组,并且按照ip最后一位排序返回

第一想法就是,把这串字符串根据正则去除里面的特殊符号,得到一个新的数组,然后将新数组里面的元素切片,根据得到元素最后一个数字进行排列,从而得到结果返回这个数组。

1 import re
2 string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"
3 #要求返回一个ip数组,并且按照ip最后一位排序返回
4 str_list = re.split('?!|!|?', string)
5 new_list = sorted(str_list, key=lambda x: x[-1])
6 print(new_list)

但是仔细想了一下,本不存在289.0.0.1这样的ip,可见这道题纯粹是为了出题而出题。

所以心里想着,可以优化一下代码,对里面的ip格式进行判断。故得到如下代码:

 1 import re
 2 result = []
 3 string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"
 4 str_list = re.split(r"?!|?|!", string)
 5 for ip in str_list:
 6     ip_list = ip.split(".")
 7     if len(ip_list) == 4:
 8         for i in ip_list:
 9             if eval(i) > 255 or eval(i) < 0:
10                 break
11         else:
12             result.append(ip)
13 result = sorted(result, key=lambda x: x[-1])
14 print(result)

从运算结果可以得知,我将不满足ip格式的元素,从这个数组里面去除了。

原文地址:https://www.cnblogs.com/chenshengkai/p/11935782.html