您可以将 list comprehension 与 generator 一起用作 tuple(..) 构造函数中的元素:
[tuple(<b>x for elem in row for x in elem</b>) for row in data]
粗体中的代码片段是一个生成器:对于每个row(即(('p1', 'p2'), ('m1',))),它会产生两层深的元素,因此:@987654325 @、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(..) 函数中当然仍然存在循环机制。