2012-10-07 215 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