簡體   English   中英

Python將嵌套元組列表轉換為元組列表

[英]Python convert list of nested tuples to list of tuples

我有一個嵌套元組的列表

[(('p1', 'p2'), ('m1',)), (('p2', 'p1'), ('m1',))]

我如何將其轉換為元組列表

[('p1', 'p2', 'm1'), ('p2', 'p1', 'm1')]

不使用for循環

您可以使用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(..)構造函數中的元素:

[tuple(x for elem in row for x in elem) for row in data]

粗體字的代碼片段是一個生成器 :對於每一row (即(('p1', 'p2'), ('m1',)) ),它產生的元素深為兩層,分別為: p1p2m1 這些被轉換為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循環,但是在列表starmap(..)map(..)starmap(..)函數中當然仍然存在循環機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM