[(('p1', 'p2'), ('m1',)), (('p2', 'p1'), ('m1',))]
嵌套的元組的列表的我怎樣才能將它轉換成元組的列表,
[('p1', 'p2', 'm1'), ('p2', 'p1', 'm1')]
不使用循環
[(('p1', 'p2'), ('m1',)), (('p2', 'p1'), ('m1',))]
嵌套的元組的列表的我怎樣才能將它轉換成元組的列表,
[('p1', 'p2', 'm1'), ('p2', 'p1', 'm1')]
不使用循環
你可以用itertools.chain
做,
In [91]: from itertools import chain
In [92]: [tuple(chain(*item)) for item in a]
Out[92]: [('p1', 'p2', 'm1'), ('p2', 'p1', 'm1')]
您可以使用列表理解與生成器作爲tuple(..)
中的元素con structor:
[tuple(x for elem in row for x in elem) for row in data]
在粗體的代碼片段是發生器:每row
(即(('p1', 'p2'), ('m1',))
)它產生兩個深度的元素,因此:p1
,p2
和m1
。這些被轉換成tuple
。
或者你可以使用itertools
:
from itertools import chain
[tuple(chain(*row)) for row in data]
這產生:
>>> data = [(('p1', 'p2'), ('m1',)), (('p2', 'p1'), ('m1',))]
>>> [tuple(x for elem in row for x in elem) for row in data]
[('p1', 'p2', 'm1'), ('p2', 'p1', 'm1')]
>>> [tuple(chain(*row)) for row in data]
[('p1', 'p2', 'm1'), ('p2', 'p1', 'm1')]
您還可以使用itertools.starmap(..)
和list(..)
刪除列表理解:
from itertools import chain, starmap
list(map(tuple,starmap(chain,data)))
其中給出:
>>> list(map(tuple,starmap(chain,data)))
[('p1', 'p2', 'm1'), ('p2', 'p1', 'm1')]
注意,雖然你不寫一個for
環路自己,當然還有在列表理解或map(..)
和starmap(..)
功能代替循環機制。
是元組嵌套的任意深?還是隻有兩個級別? –
固定,只有兩個級別 – Nitin
允許列表理解中的'for's?這真是一種不同的'for'循環。 –