c = ['A1','B1','C1','A2','B2','C2']
所需的输出是这样的:
c = [('A1','A2'),('B1','B2'),('C1','C2')]
我试图遍历列表,并使用正则表达式匹配,然后将其添加到元组中,但这对我来说并不令人信服。.还有更好的方法来解决这个问题吗?
答案 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')]