迭代通过列表与for

Mal*_*fet 0 python iteration list

我是Python的新手.想象一下,我有一个清单[100, 200, 300, 301, 315, 345, 500].我想创建一个新列表,比如[100, 200, 300, 500].

当我像这样遍历列表时:

for i in range(len(list)):
    while (list[i+1] - 100) <= list[i]:
        i = i + 1
        k = list[i]
Run Code Online (Sandbox Code Playgroud)

然后iwhile循环内的变化不会反映i在for循环中,所以我通过相同的元素迭代多次.

更改代码以避免这种情况的更好方法是什么?

Lau*_*low 5

这是我怎么做的

>>> mylist = [100,200,300,301,315,345,500]
>>> [x for x in mylist if x % 100 == 0]
[100, 200, 300, 500]
Run Code Online (Sandbox Code Playgroud)

编辑:仔细检查你的算法,似乎你实际上正在尝试建立一个大于前一个值加99的值的列表.在这种情况下,这将工作:

def my_filter(lst):
    ret = [lst[0]]
    for i1, i2 in zip(lst, lst[1:]):
        if i2 - i1 >= 100:
            ret.append(i2)
    return ret
Run Code Online (Sandbox Code Playgroud)

上面的算法是这样的:

>>> my_filter([101, 202, 303, 305, 404, 505])
[101, 202, 303, 505]
Run Code Online (Sandbox Code Playgroud)