从列表中提取数字

时间:2016-04-21 14:04:06

标签: python list

我创建了一个列表(已排序):

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个,但是,我错过了一些必要的值。

关于如何完成这项任务的任何想法?

4 个答案:

答案 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)

Tim Pietzcker的答案是正确的,但这也可以在不将最后添加的项目存储在单独的变量中的情况下完成。相反,您可以读取outlist中的最后一个值:

>>> 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)