Python 3:成对迭代列表

时间:2018-06-11 13:07:49

标签: python python-3.x for-loop iteration pairwise

我正在寻找一个很好的解决方案,在Python 3中总是从列表中读取两个元素。我需要为???编写什么?在以下代码中:

it = [1,2,3,4,5,6]
for x, y in ??? :
    print (x, y)

所需的输出是:

1 2
3 4
5 6

早期帖子中提出的解决方案不起作用:对于x,y in zip(it,it):print(x,y)

也可以用索引的for循环来解决它。但这也很难看(恕我直言)

5 个答案:

答案 0 :(得分:2)

没有拉链的另一个简单方法是:

i = 0
while i < len(it)-1:
  print(it[i], it[i+1])
  i += 2

答案 1 :(得分:2)

另一个便宜的选择,使用指数。你可能不喜欢它们,但它们很快。

it = [1,2,3,4,5,6]
for x in range(0, len(it)-1, 2):
    print(it[x], it[x+1])

答案 2 :(得分:1)

使用zip(*[iter(it)] * 2),如this answer

中所示
it = [1,2,3,4,5,6]
for x, y in zip(*[iter(it)] * 2):
    print(x, y)

答案 3 :(得分:1)

这是另一种适用于Python3的方法:

def pair(a):
   # Or simply:
   # return zip(a[::2], a[1::2])
   for k, v in zip(a[::2], a[1::2]):
       yield k, v

a = [1,2,3,4,5,6]
final = list(pair(a))
print(final)

输出:

[(1, 2), (3, 4), (5, 6)]

答案 4 :(得分:0)

让这个适合您的情况:

l = [1,2,3,4,5,6]
print(*[' '.join([str(a) for a in x]) for x in zip(l[::2],l[1:][::2])],sep='\n')

首先,我必须使用l [:​​: 2]创建列表中的奇数列表,然后使用l [1:] [:: 2]来获得偶数。这是否使用了非常有用的切片功能link

然后我将它们压缩在一起以匹配第1,第2,第3个元素等link

然后我使用list comprehension创建每个集合的列表。问题是它们是集合而不是上面的文本。要解决此问题,我将我的设置更改为字符串str()

现在已将各个集合转换为字符串,您可以加入' '

你仍然有一组3,但你可以用print打印每一行(* [list here],sep ='\ n')link

学到了一些新技巧,希望这有帮助!