我需要迭代一个列表并比较当前元素和前一个元素。我看到两个简单的选择。第一:
for index, element in enumerate(some_list[1:]):
if element>some_list[index]:
do_something()
第二
for i,j in zip(some_list[:-1], some_list[1:]):
if j>i:
do_something()
我个人不喜欢nosklo的回答表格: Python - Previous and next values inside a loop 我为什么要设置辅助函数?
那么该怎么办?
PS:我正在使用Python3
答案 0 :(得分:2)
zip方法可能是最常用的方法,但另一种选择(可能更具可读性)将是:
prev = None
for cur in some_list:
if (prev is not None) and (prev > cur):
do_something()
prev = cur
如果在some_list中某处出现None,这显然不会起作用,但除此之外它会做你想要的。
另一个版本可能是枚举方法的变体:
for prev_index, cur_item in enumerate(somelist[1:]):
if somelist[prev_index] > cur_item:
do_something()
请确保不要在循环中修改某个列表,否则结果将无法预测。
答案 1 :(得分:2)
您可以使用它来避免索引或切片的需要:
it = iter(some_list)
prev = next(it)
for ele in it:
if prev > ele:
# do something
prev = ele
itertools中还有pairwise recipe使用tee:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b) # itertools.izip python2
for a,b in pairwise(some_list):
print(a,b)