J'ai une liste de jetons, comme: et je veux générer toutes les combinaisons possibles de telles chaînes, comme: p> langue n'est pas important, aucun conseil? p> J'ai trouvé génération de permutations utilisant Bash , mais cela fait la permutation sur une seule ligne. p> p>
8 Réponses :
haskell a un permutations fonction qui aiderait: p> si Vous voulez que chaque permutation concaténée, utilisez p> si vous voulez réellement combinaisons strong> de deux sous-chaînes (comme votre exemple de sortie) au lieu de toutes les permutations map concat (combinationsOf 2 ["hel","lo","bye"])
Nice, mais cela permit toutes les lettres d'une chaîne donnée, pas de chaînes.
Lucab, les permutations travailleront sur tout irable. Regardez les exemples de Python.
@Lucab, regarde à nouveau ... la fonction permit une liste. Si vous vous transmettez une liste de caractères (une chaîne), il permutera ces caractères. Si vous vous transmettez une liste de chaînes, cela perpertorie cette liste des chaînes.
@Lucab, si vous avez évité cette réponse parce que vous pensiez que la fonction dont je parlais ne fonctionnait que sur les cordes, envisagez de changer votre vote. À Haskell, Strings sont des listes et la fonction fonctionne sur n'importe quelle liste.
ou si vous voulez des combinaisons, vous pouvez utiliser itheroTools.permutations code> peut faire que pour vous. ITERTOOLS.COMBINATIONS CODE> . P> >>> l = ['hel', 'lo', 'bye']
>>> list(itertools.combinations(l, 2))
[('hel', 'lo'), ('hel', 'bye'), ('lo', 'bye')]
Déduire de l'exemple, le OP souhaite réellement des combinaisons, pas des permutations.
Pas exactement un par ligne, ni des mots.
@kanaka, ce n'est qu'une question de joindre des cordes, de l'impression et de la mise en forme.
Votre exemple peut être écrit en python comme pour combiner la sortie aux chaînes à nouveau: p> Si vous intéressez le Mise en œuvre réelle de cette fonction, consultez le Documentation . p> p>
Résultats dans:
Toujours pas un par ligne comme demandé.
Impossible de trouver cette demande, même après avoir lu le poteau à nouveau. En outre, c'est plutôt trivial de changer cela.
"Mais cela fait la permutation sur une seule ligne." implique qu'il veut un par ligne (et son exemple de sortie le montrent comme tel).
@kanaka, il me semble que l'OP ne demande que des conseils, pas des solutions complètes.
a = ['hel', 'lo', 'bye']
print '\n'.join(''.join(x) for x in itertools.permutations(a, 2))
Cela ne fait que 2 combinaisons de jeton, pas toutes possibles à la demande.
Et pourtant, sa sortie désirée avait également 2 combinaisons de jeton :)
facile en python avec itertools.
Voici l'exemple de permutation de jeton: p> alternativement, cela traite chaque caractère en tant que jeton: p> import itertools
tokens = ["hel", "lo", "bye"]
chars = "".join(tokens)
for i in range(1, len(chars) + 1):
for p in itertools.permutations(chars, i):
print "".join(p)
Il donne toutes les permutations de tous les caractères.
Étant donné que d'autres langues sont acceptables:
hellobye helbyelo lohelbye lobyehel byehello byelohel
On dirait que vous voulez permutations code>: sortie: h3>
Lucab, je ne pense pas que "Hello" est une permutation de "hel", "lo", "au revoir" dans la compréhension normale de "permutation". Plus précisément, une permutation d'un ensemble ne peut pas laisser des membres de l'ensemble. Les répondeurs doivent donc choisir entre ce que vous avez explicitement demandé et la sortie de l'échantillon que vous montrez. Probablement "combinaisons" est ce que vous vouliez dire, comme @sven a souligné.
Vous avez raison, je voulais dire des combinaisons. Je vais mettre à jour ma question.
Juste à Lien sur cette ici pour les personnes à la recherche de toutes les combinaisons