繁体   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