我有一个包含很多子列表的列表。i、 e
mylst = [[1, 343, 407, 433, 27],
[1, 344, 413, 744, 302],
[1, 344, 500, 600, 100],
[1, 344, 752, 1114, 363],
[1, 345, 755, 922, 168],
[2, 345, 188, 1093, 906],
[2, 346, 4, 950, 947],
[2, 346, 953, 995, 43],
[3, 346, 967, 1084, 118],
[3, 347, 4, 951, 948],
[3, 347, 1053, 1086, 34],
[3, 349, 1049, 1125, 77],
[3, 349, 1004, 1124, 120],
[3, 350, 185, 986, 802],
[3, 352, 1018, 1055, 38]]
我想首先对这个列表进行分类,然后使用三个步骤制作另一个列表。首先,当每个子列表中的第一个项相同时,我要比较子列表,即mylist[a][0]==1。其次,比较子列表中的第二项,如果子列表中的第二项与下面sulbists中的另一项的差异小于2,则计算第三项或第四项之间的差异。如果第三项和第四项的差值小于10,那么我想附加子列表的索引。在
我想要的结果应该是。。。像这样:[0, 1, 3, 4, 6, 7, 10, 11, 12]
以下是我的天真尝试。在
以下是我的天真尝试。在
^{pr2}$或者
def seg(mylist) :
Segments= []
for index, value in enumerate(mylist) :
for a in range(len(mylist)-1) :
if mylist[a][0] == 1 :
try :
if abs(mylist[a][1]-mylist[a+1][1]) <= 2 :
if (abs(mylist[a][2]-mylist[a+1][2]) <= 10 or
abs(mylist[a][3] - mylist[a+1][3]) <= 10) :
Segments.append(index)
except IndexError :
if abs(mylist[a][1]-mylist[a+1][1]) <= 2 :
if (abs(mylist[a][2]-mylist[a+1][2]) <= 10 or
abs(mylist[a][3] - mylist[a+1][3]) <= 10):
Segments.append(index)
return Segments
这些代码看起来一点都不好看,结果也不像我想的那样显示出来。在下面的一个中,我编写了try and except来处理索引错误(列表超出范围),最初我使用了while迭代而不是for迭代。在
我该怎么做才能得到我想要的结果?我怎样才能把这些代码改成更像“Python”的方式呢? 任何想法都会对我很好,谢谢你。在
您将必须捕获重复的索引,但这应该更有效:
根据您的逻辑,6和7不应出现,因为它们不符合标准:
^{pr2}$同样,对于10的出现,它应该是},正如你的描述。在
<= 2
而不是{您可以使用OrderedDict删除重复项并保持顺序:
这似乎对我有用。我不确定它是否在任何方面更像Python,你会在列表中循环多次,所以你肯定可以做一些事情来优化它。在
相关问题 更多 >
编程相关推荐