Python 如何在列表上迭代/循环并引用前面的(n-1)元素?
我需要遍历一个列表并比较当前元素和前一个元素。我看到两个简单的选择 1) 使用枚举和索引来访问项目 2) 对连续的项目对使用zip() 3) itertools 我个人不喜欢Python 如何在列表上迭代/循环并引用前面的(n-1)元素?,python,python-3.x,for-loop,Python,Python 3.x,For Loop,我需要遍历一个列表并比较当前元素和前一个元素。我看到两个简单的选择 1) 使用枚举和索引来访问项目 2) 对连续的项目对使用zip() 3) itertools 我个人不喜欢 那么,在Python 3中,该怎么办呢?zip方法可能是最常用的方法,但另一种方法(可能更具可读性)是: prev = None for cur in some_list: if (prev is not None) and (prev > cur): do_something() prev
那么,在Python 3中,该怎么办呢?zip方法可能是最常用的方法,但另一种方法(可能更具可读性)是:
prev = None
for cur in some_list:
if (prev is not None) and (prev > cur):
do_something()
prev = cur
如果某个_列表中的某个地方没有发生任何事件,那么这显然不起作用,否则它会满足您的需求
另一个版本可能是枚举方法的变体:
for prev_index, cur_item in enumerate(somelist[1:]):
if somelist[prev_index] > cur_item:
do_something()
只需确保不要修改循环中的somelist,否则结果将不可预测。zip方法可能是最常用的方法,但另一种方法(可能更具可读性)是:
prev = None
for cur in some_list:
if (prev is not None) and (prev > cur):
do_something()
prev = cur
如果某个_列表中的某个地方没有发生任何事件,那么这显然不起作用,否则它会满足您的需求
另一个版本可能是枚举方法的变体:
for prev_index, cur_item in enumerate(somelist[1:]):
if somelist[prev_index] > cur_item:
do_something()
只需确保不要修改循环中的某些列表,否则结果将无法预测。您可以使用iter,它避免了索引或切片的需要:
it = iter(some_list)
prev = next(it)
for ele in it:
if prev > ele:
# do something
prev = ele
还有使用tee的itertools中的:
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)
您可以使用iter,它避免了索引或切片的需要:
it = iter(some_list)
prev = next(it)
for ele in it:
if prev > ele:
# do something
prev = ele
还有使用tee的itertools中的:
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)
投票赞成第一个建议。没有额外的软件包,也没有辅助函数的定义!请注意第一个建议。没有额外的软件包,也没有辅助函数的定义!对于iter工具的第一个解决方案,ThxUpNote表示支持,但与polpak的第一个解决方案相比有什么优势?对于iter工具的第一个解决方案,upvote表示支持,但是与polpak的第一个解决方案相比,它有什么优势?您必须告诉我们
do\u something()
是什么,在Python中,您通常不需要循环,您需要列表理解。特别是如果你的代码正在构建一个新的列表/dict/等等,你必须告诉我们什么是dou\u something()
,在Python中,你通常不需要循环,而是需要列表理解。尤其是当您的代码正在构建一个新的列表/dict/etc时。