des combinaisons entre les deux listes?
Ça fait un moment et j'ai du mal à enveloppant ma tête autour d'un algorithme que je vais essayer de le faire. En gros, j'ai deux listes et que vous souhaitez obtenir toutes les combinaisons de ces deux listes.
Je ne pourrais pas l'expliquer, corriger alors, voici un exemple.
name = 'a', 'b'
number = 1, 2
la sortie serait dans ce cas:
1. A1 B2
2. B1 A2
La partie délicate est que je pourrais avoir plus d'éléments dans le “nom de variable” que les articles dans le “nombre” de la variable(nombre sera toujours égale ou inférieure à la variable de nom).
Je suis confus comment faire toutes les combinaisons (nested loop?) et encore plus confus sur la logique de déplacer les éléments dans le nom de la variable dans le cas où il y a plus d'éléments que le nom, ils sont dans la liste nombre de.
Je ne suis pas le meilleur programmeur mais je pense que je peux lui donner un coup si quelqu'un peut m'aider à clarifier la logique/algoriythm pour atteindre cet objectif. J'ai été coincé sur des boucles for imbriquées.
Mise à jour:
Voici la sortie avec 3 variables et 2 numéros:
name = 'a', 'b', 'c'
number = 1, 2
de sortie:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
- docs.python.org/library/itertools.html
- J'ai vu, et a trouvé des exemples un peu similaire objectifs à l'aide d'itertools mais je suis prototypage en python, mais va écrire le code final dans une autre langue, donc je ne veux pas utiliser des outils qui ne sont pas bénéficier elseway.
- Ce que vous demandez n'a pas vraiment de sens. Si la première liste contient A,B,C et le deuxième contient du 1,2, quel résultat attendez-vous? Il pourrait être fait si l'exemple que vous avez donné a 4 résultats d'une lettre et d'un numéro de chacun (A1, A2, B1, B2), ou si les deux listes devaient avoir la même taille.
- Je suis d'accord avec interjay. Veuillez indiquer le résultat de la non-taille égale cas, sinon il n'est pas possible de fournir une solution générale.
- Salut tout le monde, j'ai mis à jour la réponse à montrer la sortie avec 3 noms et les 2 numéros..j'ai pensé que je vous l'explique bien, ne sais pas pourquoi le downvote.
- Comment la sortie de l'air pour
name = 'a', 'b', 'c'
etnumber = 1, 2, 3
? - La commande est vraiment important ou est-ce suffisant pour générer toutes les "combinaisons" que voulez-vous? Aussi
A1 B2 == B2 A1
? - il devrait ressembler à l'exemple que j'avais au-dessus avec les 2 noms et 2 chiffres, mais au lieu de 4 résultats il n'y aurait plus parce qu'il y a 3 éléments dans la liste nombre de. bakuriu L'ordre n'a pas vraiment d'importance, en essayant de capturer les combinaisons.
- Note pour les futurs gens de dup-ing questions à ceci: Il ya une bonne chance que Obtenir le produit cartésien d'une série de listes? c'est mieux en double cible (beaucoup de trucs qui doivent utiliser
product
est dupliqué ici, même si cette question n'est pas correctement résolu de cette façon). Dans des cas plus rares, Tous les substituts possibles des deux listes? peut-être mieux (lors de la sélection d'une valeur d'une des deux listes à chaque indice, qui est unproduct
solution à nouveau, avec unzip
prepass).
Vous devez vous connecter pour publier un commentaire.
Supposons que
len(list1) >= len(list2)
. Ensuite, ce que vous semblez vouloir, c'est de prendre toutes les permutations de longueurlen(list2)
delist1
et de les associer à des éléments de la liste 2. En python:Retourne
zip
et similaires.La façon la plus simple est d'utiliser
itertools.product
:Peut être plus simple que le plus simple ci-dessus:
sans aucune importation
Je cherchais une liste multiplié par lui-même avec uniquement des combinaisons uniques, qui est fournie dans cette fonction.
Ici qu'un extrait de le Python docs sur
itertools
Qui peut vous aider à trouver ce que vous cherchez.Vous pourriez vouloir essayer une une ligne de la liste de compréhension:
une petite amélioration pour la réponse de interjay, pour rendre le résultat comme un aplatir liste.
de référence à partir de ce lien
Sans itertools
De répondre à la question "étant donné deux listes, retrouvez toutes les permutations possibles de paires d'un élément de chaque liste" et l'utilisation de base de la fonctionnalité Python (c'est à dire, sans itertools) et, par conséquent, le rendant facile à reproduire pour d'autres langages de programmation:
Retourne