我如何创建一个for循环或一个列表推导式,以便每次迭代都给我两个元素?

l = [1,2,3,4,5,6]

for i,k in ???:
    print str(i), '+', str(k), '=', str(i+k)

输出:

1+2=3
3+4=7
5+6=11

当前回答

使用类型,以便您可以使用myypy静态分析工具验证数据:

from typing import Iterator, Any, Iterable, TypeVar, Tuple

T_ = TypeVar('T_')
Pairs_Iter = Iterator[Tuple[T_, T_]]

def legs(iterable: Iterator[T_]) -> Pairs_Iter:
    begin = next(iterable)
    for end in iterable:
        yield begin, end
        begin = end

其他回答

>>> l = [1,2,3,4,5,6]

>>> zip(l,l[1:])
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

>>> zip(l,l[1:])[::2]
[(1, 2), (3, 4), (5, 6)]

>>> [a+b for a,b in zip(l,l[1:])[::2]]
[3, 7, 11]

>>> ["%d + %d = %d" % (a,b,a+b) for a,b in zip(l,l[1:])[::2]]
['1 + 2 = 3', '3 + 4 = 7', '5 + 6 = 11']

一个简单的解决方案。

l = [1, 2, 3, 4, 5, 6]

for i in range(0, len(l), 2):
    print str(l[i]), '+', str(l[i + 1]), '=', str(l[i] + l[i + 1])

使用类型,以便您可以使用myypy静态分析工具验证数据:

from typing import Iterator, Any, Iterable, TypeVar, Tuple

T_ = TypeVar('T_')
Pairs_Iter = Iterator[Tuple[T_, T_]]

def legs(iterable: Iterator[T_]) -> Pairs_Iter:
    begin = next(iterable)
    for end in iterable:
        yield begin, end
        begin = end

这个问题的标题有误导性,你似乎在寻找连续的对,但如果你想遍历所有可能的对的集合,那么这样做是可行的:

for i,v in enumerate(items[:-1]):
        for u in items[i+1:]:

简单的方法:

[(a[i],a[i+1]) for i in range(0,len(a),2)]

如果你的数组是a,并且你想成对迭代它,这是很有用的。 要迭代三胞胎或更多,只需更改"range" step命令,例如:

[(a[i],a[i+1],a[i+2]) for i in range(0,len(a),3)]

(如果你的数组长度和步长不匹配,你必须处理多余的值)