迭代Python列表中的相邻项对[duplicate]

wdebmtf2  于 2023-02-18  发布在  Python
关注(0)|答案(5)|浏览(132)
    • 此问题在此处已有答案**:

How can I iterate over overlapping (current, next) pairs of values from a list?(12个答案)
10个月前关闭。
在Python中,是否可以用下面的方式迭代列表(把这段代码当作伪代码)?

a = [5, 7, 11, 4, 5]
for v, w in a:
    print [v, w]

它应该产生

[5, 7]
[7, 11]
[11, 4]
[4, 5]
t3psigkw

t3psigkw1#

你可以zip这个列表,它本身没有第一个元素:

a = [5, 7, 11, 4, 5]

for previous, current in zip(a, a[1:]):
    print(previous, current)

即使你的列表没有元素或者只有一个元素(在这种情况下zip返回一个空的可迭代对象,并且for循环中的代码永远不会执行),它也可以工作,它不适用于生成器,只适用于序列(tupleliststr等)。

crcmnpdw

crcmnpdw2#

根据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)

for v, w in pairwise(a):
    ...
doinxwow

doinxwow3#

要做到这一点,您应该:

a =  [5, 7, 11, 4, 5]
for i in range(len(a)-1):
    print [a[i], a[i+1]]
ee7vknir

ee7vknir4#

来自Python中列表中对的迭代(循环方式):

def pairs(seq):
    i = iter(seq)
    prev = next(i)
    for item in i:
        yield prev, item
        prev = item
dsf9zpds

dsf9zpds5#

>>> a = [5, 7, 11, 4, 5]
>>> for n,k in enumerate(a[:-1]):
...     print a[n],a[n+1]
...
5 7
7 11
11 4
4 5

相关问题