我有一个小整数列表,比如说:
[1, 2, 3, 4, 5, 6]
我希望收集连续的一对元素,并返回一个由这些元素对创建的新列表,即:
[(1, 2), (3, 4), (5, 6)]
我知道肯定有一种非常简单的方法来做到这一点,但是我无法理解。
谢谢
[1, 2, 3, 4, 5, 6]
我希望收集连续的一对元素,并返回一个由这些元素对创建的新列表,即:
[(1, 2), (3, 4), (5, 6)]
我知道肯定有一种非常简单的方法来做到这一点,但是我无法理解。
谢谢
其实有一种非常简单但比较脆弱的方法,就是将它与自身的切片版本压缩在一起。
zipped = zip(mylist[0::2], mylist[1::2])
如果您不知道的话,最后一个切片参数就是“步长”。因此,我们从零开始选择列表中的每个第二项(1、3、5)。然后我们从一开始做同样的事情(2、4、6),并使用zip
将它们制作成元组。
if len(mylist)%2 !=0: mylist.append('') ; zip(mylist[0::2], mylist[1::2])
- Aseem Yadavzipped = itertools.zip_longest(mylist[0::2], mylist[1::2])
to pad odd length lists, default fillvalue=None
- Steven Than除了以上的答案,你还需要知道最简单的方法(如果你之前不知道的话)
l = [1, 2, 3, 4, 5, 6]
o = [(l[i],l[i+1]) for i in range(0,len(l),2)]
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
(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)
,而不是 (1, 2), (3, 4), (5, 6)
。 - Daniel Roseman