简单问题:我有u = [1, 2, 3, 4, 5, 6]
。我想要v = [(1,2), (3,4), (5,6)]
。怎么样?
显然,一个解决方案是:
v = []
for i in range(len(u)):
j = 2*i
v += [(u(j), u(j+1))]
但这太丑陋了我讨厌每次都这样做。还有更好的方法吗?
答案 0 :(得分:2)
zip是一种pythonic解决方案。
list(zip(u[::2], u[1::2]))
答案 1 :(得分:0)
这是针对不支持切片符号的迭代的更通用的解决方案
def n_clusters(iterable, n=2):
return zip(*[iter(iterable)]*n)
请注意,输出中不包含任何剩余值(例如输入列表中包含奇数个元素)。我们通过使用itertools.zip_longest
函数来纠正这个问题。
from itertools import zip_longest
def n_clusters(iterable, n=2, fillvalue=None):
return zip_longest(*[iter(iterable)]*n, fillvalue=fillvalue)
以上两者都将在分组值上返回迭代器。您可以手动构建一个列表
grouped_values = list(n_cluster([1, 2, 3, 4]))
# [(1, 2), (3, 4)]
或直接迭代它们
for a, b in n_cluster([1, 2, 3, 4]):
...