List Comprehension重置迭代器变量?

时间:2015-10-18 09:19:31

标签: python

是否可以重置

中的x
lis[3, 3, 4, 5]

test = [(tes(x)) for x in range (0, len(lis)) if lis[x] == "abc"]

或者可能改为使用while循环。事情是,我想在我完成后lis运行这个理解列表,而不仅仅是一次迭代。

说我想减少列表中的每个变量。

lis[3, 3, 4, 5]

lis[2, 2, 3, 4]

lis[1, 1, 2, 3]

lis[0, 0, 1, 2]

然后在第一次击中零时停止。

2 个答案:

答案 0 :(得分:2)

你可以cycle列表,直到达到你的条件,这里我们打破第一个值0

from itertools import cycle

lis = [3, 3, 4, 5]
for ind, ele in enumerate(iter(lambda: next(cycle(lis)), 0)):
    lis[ind % len(lis)] -= 1

print(lis)
[0, 1, 2, 3]

答案 1 :(得分:1)

假设您希望将列表中的所有成员减少1,直到较小的成员达到0的值。

def decrease_list(lis):
     def stop():
         raise Exception("Stop")
     try:
         while True:
             lis=[e - 1 if e>1 else stop() for e in lis]
     except:
         pass
     return lis

让我们测试一下:

In [35]: lis=[20, 12, 11, 10]

In [36]: decrease_list(lis)
Out[36]: [10, 2, 1, 0]

In [33]: lis =  [20, 12, 10, 10]

In [34]: decrease_list(lis)
Out[34]: [10, 2, 0, 0]