如何将2个简短列表中的元素追加到另一个大元组列表中?

说我有以下列表:

l1 = [('a','b','c'),('d','e','f'),('g','h','i'),('j','k','l')]
l2 = ['x','y','z']
l3 = ['m','n']

我想从l2和l3中提取元素,然后将l2 [i](i在range(len(l2)))中添加为每个元组中的第一个元素,并添加l3 [i](i在range(len(l2))中) )作为每个元组中的最后一个元素.

因此结果将如下所示:

l1 = [('x','a','b','c','m'),('x','a','b','c','n'),('y','a','b','c','m'),('y','a','b','c','n'), ('z','a','b','c','m'),('z','a','b','c','n')]

是的,l1的len将增加.

解决方法:

您可以在itertools.chain.from_iterableitertools.product的帮助下进行操作,并获得笛卡尔积,如下所示

>>> from itertools import chain, product
>>> from pprint import pprint
>>> pprint([tuple(chain.from_iterable(i)) for i in product(l2, [l1[0]], l3)])
[('x', 'a', 'b', 'c', 'm'),
 ('x', 'a', 'b', 'c', 'n'),
 ('y', 'a', 'b', 'c', 'm'),
 ('y', 'a', 'b', 'c', 'n'),
 ('z', 'a', 'b', 'c', 'm'),
 ('z', 'a', 'b', 'c', 'n')]

您正在l1和l3的第一个元素l2之间找到笛卡尔乘积.由于结果将是一个包含l2中的元素(字符串)和l1中的第一个元素(元组)以及l3中的元素(字符串)的元组,因此我们使用chain.from_iterable对其进行展平.

假设我们没有将元组弄平,那么这就是你会得到的

>>> pprint([tuple(items) for items in product(l2, [l1[0]], l3)])
[('x', ('a', 'b', 'c'), 'm'),
 ('x', ('a', 'b', 'c'), 'n'),
 ('y', ('a', 'b', 'c'), 'm'),
 ('y', ('a', 'b', 'c'), 'n'),
 ('z', ('a', 'b', 'c'), 'm'),
 ('z', ('a', 'b', 'c'), 'n')]

这就是为什么我们使用chain.from_iterable并展平元组的原因.

上一篇:使用Python列表理解从嵌套元组字典结构检索数据


下一篇:将字符串转换为2元组的列表