Disons que j'ai les listes suivantes:
l1 = [('a','b','c'),('d','e','f'),('g','h','i'),('j','k','l')]
l2 = ['x','y','z']
l3 = ['m','n']
Je veux extraire des éléments de l2 et l3, puis ajouter l2 [i] ( i in range(len(l2))
) comme premier élément à l'intérieur de chaque tuple, et l3 [i] ( i in range(len(l2))
) comme dernier élément à l'intérieur de chaque tuple.
donc le résultat ressemblera à ce qui suit:
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')]
et oui, le len de l1 sera augmenté.
Vous pouvez le faire à l'aide de itertools.chain.from_iterable
et itertools.product
, et obtenir le produit cartésien, comme celui-ci
>>> 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')]
Vous trouvez le produit cartésien entre l2
, le premier élément de l1
et l3
. Puisque le résultat sera un tuple avec l'élément from l2
(une chaîne) et le premier élément de l1
(un tuple) et un élément de l3
(une chaîne), nous l'aplatissons avec chain.from_iterable
.
Disons que nous n'aplatissons pas les tuples, alors c'est ce que vous obtiendrez
>>> 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')]
C'est pourquoi nous utilisons chain.from_iterable
et aplatissons les tuples.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots