将列表中的每对元素收集到Python中的元组中

Tar*_*ama 20 python

可能重复:
单个列表中的对

我有一个小整数列表,说:

[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我希望收集顺序对并返回一个包含从这些对创建的元组的新列表,即:

[(1, 2), (3, 4), (5, 6)]
Run Code Online (Sandbox Code Playgroud)

我知道必须有一个非常简单的方法来做到这一点,但不能完全解决它.

谢谢

Sku*_*del 34

那么有一种非常容易但有些脆弱的方式,用自己的切片版本拉链.

zipped = zip(mylist[0::2], mylist[1::2])
Run Code Online (Sandbox Code Playgroud)

如果您不知道,最后一个切片参数是"步骤".因此,我们从零(1,3,5)开始选择列表中的每个第二项.然后我们做同样的事情,但从一个(2,4,6)开始,并用它们制作元组zip.

  • 奇数个元素可能会产生令人惊讶的结果.此外,零长度列表将表现不佳. (5认同)

Jim*_*som 5

直接来自itertools模块的Python文档:

from itertools import tee, izip

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

l = [1, 2, 3, 4, 5, 6]
for pair in pairwise(l):
    print pair
Run Code Online (Sandbox Code Playgroud)

  • 这并没有完全给出OP所要求的内容 - 它打印`(1,2),(2,3),(3,4),(4,5),(5,6)`而不是`(1, 2),(3,4),(5,6)` (5认同)
  • 正确的函数是`grouper`,在itertools食谱的正下方;) (3认同)

Sen*_*ran 5

除了上述答案之外,您还需要了解最简单的方法(如果您还不知道)

l = [1, 2, 3, 4, 5, 6]
o = [(l[i],l[i+1]) for i in range(0,len(l),2)]
Run Code Online (Sandbox Code Playgroud)

  • 我完全忘记了可选的 step 参数范围 (2认同)
  • 这对我有用,接受的答案没有,但就我而言,列表始终是偶数。 (2认同)