7
votes

iTerTools.Produits () Valeur de retour ()

Lorsque j'ai essayé d'exécuter le code suivant xxx

Il a renvoyé un objet du type suivant: xxx

alors j'ai essayé la liste des appelants () sur elle et j'ai eu ce qui suit: xxx

existe-t-il un moyen de le faire dans une liste de listes, au lieu de tuples? Comme ceci: xxx

merci d'avance!


6 commentaires

Il renvoie le produit cartésien.


Quelle est ta question? Vous vous demandez ce que itheroTools.Product retourne? Ou demandez-vous comment convertir la valeur de retour dans une liste de listes?


Pourquoi est-ce que vous devez faire cela? Il semble très probable que tout ce que vous essayez de réaliser peut être fait de manière meilleure.


iTertools sont là pour éviter de construire des listes.


Les listes sont-elles pires que les tuples? J'essayais de convertir des tuples en listes car je dois les formater pour autre chose. Je veux savoir à la fois ce qu'Ottools.Product revient et comment les convertir en listes. Désolé pour l'ambiguïté


Une nouvelle question à la question posée ci-dessus. Comment appelle-t-on chaque élément de la valeur renvoyée dans la question de la question susmentionnée?


3 Réponses :


1
votes

Vous pouvez faire ce qui suit mais c'est inutile. Étant donné que les valeurs ne changent pas de tuple sont plus adaptées à cette liste qu'une liste. Il enregistre également la mémoire.

>>> from itertools import product
>>> [list(x) for x in product([1,2,3],['a','b'])]
[[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b'], [3, 'a'], [3, 'b']]


0 commentaires

2
votes

Il renvoie un itérateur de tuples. Si vous souhaitez une liste de listes, vous pouvez faire: xxx pré>

Cependant, dans de nombreux cas, il suffit d'utiliser l'itérateur est meilleur. Vous pouvez simplement faire: P>

for item in product([1,2,3],['a','b']):
    # do what you want with the item


0 commentaires

8
votes
list(map(list, product([1, 2, 3], ['a', 'b'])))
The outermost list() is not necessary on Python 2, though it is for Python 3. That is because in Python 3 a map object is returned by map().

8 commentaires

C'est pourquoi je pense qu'une compréhension de la liste est meilleure pour que cela soit compatible, bien que ce soit une tâche très étrange.


@Jamylak: Oui, il serait effectivement plus compatible. La raison pour laquelle je les ai évitées est que je les évite généralement si je ne suis pas réellement besoin leurs variables factices, pour éviter d'introduire du bruit. ( Carte (Liste, ...) Lit beaucoup mieux à moi que [Liste (L) pour L dans ...] ... YMMV)


@Mehrad je vois votre point mais dans ce cas, votre solution serait meilleure sur Python 2 mais pire dans Python 3


@Jamylak: Je suppose que j'ai manqué de répondre à cela il y a 3 ans, mais le problème est que, dans Python 2, la variable factice peut affecter le reste du programme car ses fuites de portée. C'est une chose correcte non seulement une chose esthétique.


A quoi faites-vous référence?


@jamyla: Je parle de votre dernière réponse; Je dis que c'est plus qu'un problème de lisibilité; Dans Python 2, la variable nominale de la compréhension de la liste peut réaffecter une autre variable du même nom dans la fonction actuelle.


Ensuite, je ne suis pas d'accord avec vous parce que cela s'applique à chaque utilisation d'une compréhension de la liste. Vous dites essentiellement n'utilisez jamais une compréhension de la liste car vous pouvez utiliser accidentellement le même nom de variable qui fuira la portée. La plupart des gens vont simplement utiliser un nom descriptif différent pour tout. Ce n'est pas une raison valable pour éviter d'utiliser des compréhensions de liste dans Python 2


@Jamylak: C'est exactement ce que je dis, oui. : P Je pense que c'est mais ça va Haha.