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)
然后i
while循环内的变化不会反映i
在for循环中,所以我通过相同的元素迭代多次.
更改代码以避免这种情况的更好方法是什么?
这是我怎么做的
>>> 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)