我是python的新手,目前正努力以我想要的方式返回元组列表。
如果我有一个看起来像元组的列表
[('a',),('b',),('c',),('d',),('e',),('f',)]
如何将其更改为
[('a','b'),('c','d'),('e','f')]
或
[('a','b','c'),('d','e'),('f',)] ?
是否有一种简单的方法来重组元组?
任何帮助将不胜感激。
答案 0 :(得分:1)
对于内部元组的一致长度,您可以通过itertools.chain
展平元组列表,然后定义分块生成器:
from itertools import chain
L = [('a',),('b',),('c',),('d',),('e',),('f',)]
def chunker(L, n):
T = tuple(chain.from_iterable(L))
for i in range(0, len(L), n):
yield T[i: i+n]
res_2 = list(chunker(L, 2)) # [('a', 'b'), ('c', 'd'), ('e', 'f')]
res_3 = list(chunker(L, 3)) # [('a', 'b', 'c'), ('d', 'e', 'f')]
res_4 = list(chunker(L, 4)) # [('a', 'b', 'c', 'd'), ('e', 'f')]
否则,您需要首先定义逻辑以确定每个元组的大小。
答案 1 :(得分:0)
您可以将zip
与适当的片一起使用:
l = [('a',),('b',),('c',),('d',),('e',),('f',)]
[x+y for x, y in zip(l[::2], l[1::2])]
# [('a', 'b'), ('c', 'd'), ('e', 'f')]
答案 2 :(得分:0)
使用itertools recipe
中的 grouper
:
from itertools import chain, zip_longest
lst = [('a',),('b',),('c',),('d',),('e',),('f',)]
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
如何使用?
>>> list(grouper(2, chain.from_iterable(lst)))
[('a', 'b'), ('c', 'd'), ('e', 'f')]
>>> list(grouper(3, chain.from_iterable(lst)))
[('a', 'b', 'c'), ('d', 'e', 'f')]