在列表中迭代每两个元素

310

如何编写 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

6
针对重叠的一对元素:https://dev59.com/p2035IYBdhLWcg3wZ_Qt这个问题询问如何在Python中以一对一对的形式迭代一个列表。在迭代时,包括当前元素和下一个元素作为一对,以便可以在每个对之间进行比较或操作。 - user202729
1
下次避免将某些东西命名为'l',因为它很容易与数字1、字母I或竖线混淆。最好将其命名为List或L(如果你想节省空间)。 - Nadu
1
只需使用两个变量的循环: for i,k in zip(range(1,7)[0::2], range(1,7)[1::2]): print str(i), '+', str(k), '=', str(i+k) - Shrm
正如我在下面由@johnysweb选择的答案中提到的那样,现在可以使用海象运算符(3.8+)以简洁的方式来完成这个操作:for i, k in zip(_x := iter(mylist), _x): ... - Alex Just Alex
22个回答

-1

在这里,我们可以有一个alt_elem方法,它可以适用于您的for循环。

def alt_elem(list, index=2):
    for i, elem in enumerate(list, start=1):
        if not i % index:
           yield tuple(list[i-index:i])


a = range(10)
for index in [2, 3, 4]:
    print("With index: {0}".format(index))
    for i in alt_elem(a, index):
       print(i)

输出:

With index: 2
(0, 1)
(2, 3)
(4, 5)
(6, 7)
(8, 9)
With index: 3
(0, 1, 2)
(3, 4, 5)
(6, 7, 8)
With index: 4
(0, 1, 2, 3)
(4, 5, 6, 7)

注意:考虑到在函数中执行的操作,上述解决方案可能不够高效。

-2

这是一个简单的解决方案,使用range函数从元素列表中选择交替元素。

注意:这仅适用于偶数个元素的列表。

a_list = [1, 2, 3, 4, 5, 6]
empty_list = [] 
for i in range(0, len(a_list), 2):
    empty_list.append(a_list[i] + a_list[i + 1])   
print(empty_list)
# [3, 7, 11]

2
尝试提供解释而不仅仅是代码。 - lwisi
1
@LuisArgüelles的建议在这里尤为重要,因为这个问题已经十年了,已经有20个答案了。想象一下试图整理这些答案以找出哪一个是相关的?试着解释一下你的答案有何不同,并且在什么情况下可能更好。你是否依赖于其他答案中未涉及的新语法?你的方法是否更快或更高效?它是否更适合特定类型的数据(例如较小的数组)? - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接