如何配对列表中的连续元素,没有重叠?

问题描述 投票:0回答:2

简单的问题:我有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))]

但是这太丑陋了,我讨厌每次都这样做。有没有更好的办法?

python python-3.x list
2个回答
2
投票

zip是一种pythonic解决方案。

list(zip(u[::2], u[1::2]))

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]):
    ...
© www.soinside.com 2019 - 2024. All rights reserved.