2012-10-07 163 views
-2

有没有办法将参数列表转换为列表?从参数列表中创建列表

财产以后这样的:

list(*arguments) 

这么想的工作,因为名单()取至多说法...

我尝试施放元组的元组到列表

list(('a', *('b', 5)) 

dosent work at all ...

+4

那么只是'list(arguments)'? – JBernardo

+0

你可以发布'print(arguments)'的输出吗? – Blender

+0

可能的重复[Flatten(不规则)列表在Python中](http://stackoverflow.com/questions/2158395/flatten-an-irregular-list-of-lists-in-python) –

回答

1

对于元组的元组,例如

a = ((1, 2), (3, 4), (5, 6)) 

获取它变成一个列表取决于你期待什么列表 - 您可以通过元组直入list(它需要的任何可迭代),以获得元组的列表:

>>> list(a) 
[(1, 2), (3, 4), (5, 6)] 

相反,如果你要扁平列表,你想itertools.chain - 它给你一台发电机,但是你可以通过list获取列表:

>>> import itertools 
>>> list(itertools.chain.from_iterable(a)) 
[1, 2, 3, 4, 5, 6] 

如果你想要一个列表的列表,你想有一个列表理解:

>>> [list(b) for b in a] 
[[1, 2], [3, 4], [5, 6]] 

为了展平元组和单值的异质元组,它变得有点复杂 - 你想要做的就是把所有的单什么值转换为单长度元组或列表,然后它与上面的chain示例相同。如果你只是想要扁平化元组,而不是,例如嵌套列表,你可以这样做:

>>> a = ('a', ('b', 'c')) 
>>> list(itertools.chain.from_iterable(b if isinstance(b, tuple) else [b] for b in a)) 
['a', 'b', 'c'] 
+0

Does chain()支持混合整数与字符? (链('a',5)) – Jah

+1

@Jah是的,虽然不是那样。它不关心你给它的任何iterables中的*,但它的所有参数都必须是可迭代的(字符串,int不是) - list(chain('a',[5])) '给出'['a',5]'。 – lvc