gpt4 book ai didi

loops - Python 循环 : idiomatically comparing successive items in a list

转载 作者:太空狗 更新时间:2023-10-29 22:04:31 24 4
gpt4 key购买 nike

我需要遍历对象列表,像这样比较它们:0 与 1、1 与 2、2 与 3 等(我正在使用 pysvn 提取差异列表。)我最后只是遍历一个索引,但我一直想知道是否有某种方法可以做到这一点,这种方法更符合惯用语。是 python ;我不应该以某种巧妙的方式使用迭代器吗?简单地遍历索引似乎很清楚,但我想知道是否有更具表现力或更简洁的方法来做到这一点。

for revindex in xrange(len(dm_revisions) - 1):
summary = \
svn.diff_summarize(svn_path,
revision1=dm_revisions[revindex],
revision2 = dm_revisions[revindex+1])

最佳答案

这称为滑动窗口。有一个 example in the itertools documentation做到了。这是代码:

from itertools import islice

def window(seq, n=2):
"Returns a sliding window (of width n) over data from the iterable"
" s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result

那是什么,你可以这样说:

for r1, r2 in window(dm_revisions):
summary = svn.diff_summarize(svn_path, revision1=r1, revision2=r2)

当然你只关心 n=2 的情况,所以你可以用更简单的方法逃脱:

def adjacent_pairs(seq):
it = iter(seq)
a = it.next()
for b in it:
yield a, b
a = b

for r1, r2 in adjacent_pairs(dm_revisions):
summary = svn.diff_summarize(svn_path, revision1=r1, revision2=r2)

关于loops - Python 循环 : idiomatically comparing successive items in a list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com