我有一个列表,我想减少列表中的值的数量。所以我对列表进行排序并尝试使用范围,但我有点卡住了。你知道吗
迄今为止的代码:
ports=["1/1/1","1/1/3","2/1/5", "1/1/2", "2/1/6" ]
arange=[]
brange=[]
def test():
for i in ports:
num=i.split("/")
portnum=num [-1]
arange.append(portnum)
portindex=i[:-1]
arange.sort()
for i in range(len(arange)-1):
a, b= int (arange[i]), int (arange[i+1])
if (a+1) == b:
brange.append(portindex+arange[i]+"-"+str(b))
print (brange)
test()
我得到的结果是:
['2/1/1-2', '2/1/2-3', '2/1/5-6']
我真正想要的是
['1/1/1-3','2/1/5-6']
有什么线索吗?你知道吗
下面是一个使用^{} 的解决方案。它首先将端口分组到defaultdict列表中,然后使用
minmax()
实用程序函数输出分组的结果范围。你知道吗注意:
str.rsplit()
从右侧拆分。特别是在这种情况下,从右边开始的第一个1
delimeter。你知道吗更新
如果要处理丢失的端口,可以尝试此函数:
输出:
虽然还有其他更整洁的解决方案,但我的有点不同。 其他的只取最小值和最大值,这意味着如果您输入:
minify(['1/1/1','1/1/900'])
您将获得:
['1/1/1-900']
这可能不是你想要的。你知道吗
当两个端口之间的距离超过1时,我的函数将创建一个新组:
['1/1/1', '1/1/900']
我想这会满足你的要求:
输出:
相关问题 更多 >
编程相关推荐