打开列表元组列表

时间:2015-05-20 16:30:46

标签: python list tuples list-comprehension

我有一个元组列表,其中元组中的一个元素是一个列表。

example = [([0, 1, 2], 3, 4), ([5, 6, 7], 8, 9)]

我想最终得到一个元组列表

output = [(0, 1, 2, 3, 4), (5, 6, 7, 8, 9)]

这个question似乎解决了元组的问题,但我担心因为我的用例在内部列表中有更多元素而且

[(a, b, c, d, e) for [a, b, c], d, e in example]

似乎乏味。有没有更好的方法来写这个?

3 个答案:

答案 0 :(得分:5)

元组可以与+类似的列表连接起来。所以,你可以这样做:

>>> example = [([0, 1, 2], 3, 4), ([5, 6, 7], 8, 9)]
>>> [tuple(x[0]) + x[1:] for x in example]
[(0, 1, 2, 3, 4), (5, 6, 7, 8, 9)]

请注意,这适用于Python 2.x和3.x。

答案 1 :(得分:4)

在Python3中你也可以这样做:

[tuple(i+j) for i, *j in x]

如果您不想拼出输入的每个部分

答案 2 :(得分:2)

如果编写一个函数是一个选项:

from itertools import chain

def to_iterable(x):
    try:
        return iter(x)
    except TypeError:
        return x,

example = [([0, 1, 2], 3, 4), ([5, 6, 7], 8, 9)]
output = [tuple(chain(*map(to_iterable, item))) for item in example]

给出了:

print(output)
[(0, 1, 2, 3, 4), (5, 6, 7, 8, 9)]

它比其他解决方案更冗长,但无论内部元组中列表的位置或数量如何,都具有工作的优势。根据您的要求,这可能是过度杀伤或一个好的解决方案。