Pythonic 循环列表
假设我有一个列表,
l = [1, 2, 3, 4, 5, 6, 7, 8]
我想找到一个任意元素的索引,以及它邻居的值。比如,
i = l.index(n)
j = l[i-1]
k = l[i+1]
但是,当 i == len(l) - 1
这种情况出现时,这个方法就不行了。所以我想把它包裹起来,
if i == len(l) - 1:
k = l[0]
else:
k = l[i+1]
有没有什么更优雅的方式来实现这个呢?
7 个回答
8
通常,我们想把一些数值调整到一个特定的范围时,可以使用 %
这个符号。它的作用就像是把数字“圈起来”,让它们在一个固定的范围内循环。
k = l[(i + 1) % len(l)]
33
将一个固定长度的列表循环使用,最简单的方法就是用%(取模)运算符。
list_element = my_list[idx % len(my_list)]
不过你可以看看这个链接:https://docs.python.org/library/itertools.html#itertools.cycle
from itertools import cycle
for p in cycle([1,2,3]):
print "endless cycle:", p
另外要注意:这个工具可能需要占用比较多的额外存储空间(这取决于可迭代对象的长度)。
46
你可以使用取模运算符!
i = len(l) - 1
jIndex = (i - 1) % len(l)
kIndex = (i + 1) % len(l)
j = l[jIndex]
k = l[kIndex]
或者,简单点说:
k = l[(i + 1) % len(l)]