迭代重叠的列表值对
迭代 Python 列表时,通常需要访问当前元素和后续元素。虽然使用 zip 函数对连续值进行配对是有效的,但可能还有更有效的方法。
使用pairwise() 函数
Python 3.8 提供了 itertools。 pairwise() 函数,它将可迭代的连续元素配对:
import itertools def pairwise(iterable): "s -> (s0, s1), (s1, s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
此函数创建两个迭代器 a 和 b,指向输入可迭代对象的第一个元素。 b 前进一步,导致 a 指向当前元素,b 指向下一个元素。然后使用 zip 对两个迭代器中的元素进行配对。
用法示例:
the_list = ['a', 'b', 'c', 'd'] for current, next in pairwise(the_list): print(current, next) # Output: # a b # b c # c d
注意事项:
值得注意的是,pairwise() 通过多次迭代可迭代来发挥作用。这意味着,如果一个迭代器的前进速度明显快于其他迭代器,则实现可能会将消耗的元素保留在内存中,以确保它们可供所有迭代器使用。
N 元素 Windows 的其他选项
pairwise() 函数可以扩展以创建任意大小的窗口:
def n_wise(iterable, n): "s -> (s0, s1, ..., s(n-1)), (s1, s2, ..., s(n)), ..." iterators = itertools.tee(iterable, n) for i in range(1, n): next(iterators[i], None) return zip(*iterators)
例如,迭代列表中的三元组:
for triplet in n_wise(the_list, 3): print(*triplet) # Output: # a b c # b c d
结论:
虽然使用 zip 迭代重叠对的传统方法是可行的,但pairwise() 和 n_wise 函数提供一种简洁有效的方法来为任何大小的窗口实现相同的结果。
以上是如何在 Python 中有效地迭代列表值的重叠对(或 N 元素窗口)?的详细内容。更多信息请关注PHP中文网其他相关文章!