从Python的项目列表中生成元组

时间:2018-12-11 17:44:41

标签: python list tuples

我试图从更大的列表中生成一个元组列表。我该如何以pythonic方式进行操作?

c = ['A1','B1','C1','A2','B2','C2']

所需的输出是这样的:

c = [('A1','A2'),('B1','B2'),('C1','C2')]

我试图遍历列表,并使用正则表达式匹配,然后将其添加到元组中,但这对我来说并不令人信服。.还有更好的方法来解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

如果长度完全相同,则可以执行以下操作:

half = len(c) / 2
pairs = zip(c[:half], c[half:])

zip接受两个列表并返回一个成对列表。这些切片分别指向列表的前半部分和后半部分。

答案 1 :(得分:1)

您可以在中间位置对列表进行切片,然后使用列表本身进行压缩:

list(zip(c, c[len(c)//2:]))

答案 2 :(得分:0)

在不假设每个元组的顺序或大小的情况下,可以使用collections.defaultdict确实是假设您的字母在A-Z范围内。

from collections import defaultdict

dd = defaultdict(list)

c = ['A1','B1','C1','A2','B2','C2']

for i in c:
    dd[i[:1]].append(i)

res = list(map(tuple, dd.values()))

print(res)

[('A1', 'A2'), ('B1', 'B2'), ('C1', 'C2')]