2017-07-15 1 views
1

Je suis en train de faire des combinaisons possibles de 'AB', comme:Faire des combinaisons possibles?

[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]. 

J'utilise itertools.permutations, mais son juste retour, [('A', 'B'), ('B', 'A')]

Quelle serait la procédure pour avoir à la fois ('A','A') et ('B','B') aussi.

Aussi, ici je parle avec l'entrée 'AB'. Quelle serait la procédure si je devais faire des combinaisons de l'entrée 'AB', 'BA' tel que la sortie est [('AB','AB'), ('AB, 'BA'), ('BA', 'BA'), ('BA','BA']).

Aussi, je ne m'inquiète pas de la commande.

Répondre

2

L'outil de recherche rapide que vous recherchez est product.

>>> list(itertools.product('AB', repeat=2)) 
[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')] 

Cela donnera toutes les dispositions possibles des éléments spécifiés qui sont de longueur 2 (spécifiée par le mot-clé repeat). Les deux permutations et combinationsexplicitly state qu'ils ne répètent pas les éléments. La fonction itertools.combinations_with_replacement est proche de ce que vous voulez, ce qui permet des éléments répétés, mais ne donne que des combinaisons distinctes, plutôt que toutes les permutations. La fonction itertools.permutations_with_replacement n'existe pas, car c'est exactement ce que vous donne itertools.product.

+0

Merci K. Nielson pour le bon conseil. itertools.product a bien fonctionné pour l'entrée, 'AB' – engqureshi

1

En dehors de ce que Nielson a ajouté, vous pouvez également obtenir le résultat souhaité sans utiliser itertools,

x = 'AB' 
l = [(a, b) for a in x for b in x] 

Cela produira la sortie désirée.

+0

Merci Pawan pour l'aide. Oui, cela fonctionne de la même manière que itertools. – engqureshi