我需要使用2個元素創建列表元組。Python程序員的邏輯任務。從列表中創建列表元組
例如,如果我有列表range(10)
我需要做的元組是這樣的:
[(0,1),(2,3),(4,5),(6,7),(8,9)]
我如何能實現呢?
我需要使用2個元素創建列表元組。Python程序員的邏輯任務。從列表中創建列表元組
例如,如果我有列表range(10)
我需要做的元組是這樣的:
[(0,1),(2,3),(4,5),(6,7),(8,9)]
我如何能實現呢?
請參閱從itertools
文檔的grouper recipe:
from itertools import izip_longest
def grouper(n, iterable, fillvalue=None):
"""
>>> grouper(3, 'ABCDEFG', 'x')
["ABC", "DEF", "Gxx"]
"""
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
這意味着,你可以這樣做:
[(el[0], el[1]) for el in grouper(2, range(10))]
或者更一般地說:
[(el[0], el[1]) for el in grouper(2, elements)]
我會寫列表(grouper(2,range(10))) – 2010-07-30 20:34:35
不錯!我會記住的。 – 2010-07-30 20:45:10
許多不同的方式。只是爲了炫耀幾個:
爲列表理解,其中l是一個序列(即整數索引):[(l[i], l[i+1]) for i in range(0,len(l),2)]
作爲發電機的功能,適用於所有iterables:
def some_meaningful_name(it):
it = iter(it)
while True:
yield next(it), next(it)
天真通過名單切片(較大列表的糟糕表現)和複製,再次使用列表理解:[pair for pair in zip(l[::2],l[1::2])]
。
我喜歡第二好的,它可能是最pythonic和通用的(因爲它是一個發電機,它運行在恆定的空間)。
也可以用做numpy:?多的元組兩對元組在Python]
import numpy
elements = range(10)
elements = [tuple(e) for e in numpy.array(elements).reshape(-1,2).tolist()]
# [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
的可能重複(http://stackoverflow.com/questions/756550/multiple-tuple-to -two-pair-tuple-in-python) – 2010-07-30 20:09:45
duplicate:http://stackoverflow.com/questions/870652/pythonic-way-to-split-comma-separated-numbers-into-pairs/870677#870677 – FogleBird 2010-07-30 20:33:16
可能的重複[你如何在Python中將列表分割成大小均勻的塊?](http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in -python) – tzot 2011-02-27 22:11:43