我创建了一个列表(已排序):
indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33]
我想从这个列表中提取彼此相距至少五个的数字,然后将它们输入到另一个列表中。这有点令人困惑。这是我想要输出的一个例子:
outlist = [0, 7, 19, 25, 31]
正如您所看到的,这些数字都不在彼此之内。
我尝试过这种方法:
for index2 in range(0, len(indexlist) - 1):
if indexlist[index2 + 1] > indexlist[index2] + 5:
outlist.append(indexlist[index2])
然而,这给了我这个输出:
outlist = [0, 12, 19]
当然,这些数字至少有5个,但是,我错过了一些必要的值。
关于如何完成这项任务的任何想法?
答案 0 :(得分:4)
您需要跟踪添加到列表中的最后一项,而不仅仅是与以下值进行比较:
In [1]: indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33]
In [2]: last = -1000 # starting value hopefully low enough :)
In [3]: resultlist = []
In [4]: for item in indexlist:
...: if item > last+5:
...: resultlist.append(item)
...: last = item
...:
In [5]: resultlist
Out[5]: [0, 7, 19, 25, 31]
答案 1 :(得分:1)
这应该可以解决问题。在这里,正如我在评论中所述,outlist
初始化为indexlist
的第一个值,并将迭代的indexlist
元素与其进行比较。这是一个粗略的解决方案。但是有效。
indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33]
outlist = [indexlist[0]]
for index2 in range(1, len(indexlist) - 1):
if indexlist[index2] > (outlist[-1] + 5):
outlist.append(indexlist[index2])
输出:
>>outlist
[0, 7, 19, 25, 31]
答案 2 :(得分:1)
>>> indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33]
>>> outlist = []
>>> for n in indexlist:
... if not outlist or n > outlist[-1] + 5:
... outlist.append(n)
...
>>> outlist
[0, 7, 19, 25, 31]
答案 3 :(得分:0)
我认为您的index_list
已排序。然后,这将只为您提供索引MIN_INDEX_OFFSET
。
MIN_INDEX_OFFSET = 5;
index_list = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33];
last_accepted = index_list[0];
out_list = [last_accepted];
for index in index_list:
if index-last_accepted > MIN_INDEX_OFFSET:
out_list.append(index);
last_accepted = index;
print(out_list)