8
votes

Générez toutes les chaînes possibles d'une liste de jetons

J'ai une liste de jetons, comme: xxx

et je veux générer toutes les combinaisons possibles de telles chaînes, comme: xxx

langue n'est pas important, aucun conseil?

J'ai trouvé génération de permutations utilisant Bash , mais cela fait la permutation sur une seule ligne.


3 commentaires

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


8 Réponses :


0
votes

mise à jour: strong> Je vois que je n'étais pas assez explicite.

haskell a un permutations fonction qui aiderait: p> xxx pré>

si Vous voulez que chaque permutation concaténée, utilisez p> xxx pré>

si vous voulez réellement combinaisons strong> de deux sous-chaînes (comme votre exemple de sortie) au lieu de toutes les permutations Strong> de sous-chaînes, comme @sven remarqué, utilisez le module Math.comBinatorics.graph et: P>

map concat (combinationsOf 2 ["hel","lo","bye"])


4 commentaires

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.



7
votes

itheroTools.permutations code> peut faire que pour vous. xxx pré>

ou si vous voulez des combinaisons, vous pouvez utiliser ITERTOOLS.COMBINATIONS CODE> . P>

>>> l = ['hel', 'lo', 'bye']
>>> list(itertools.combinations(l, 2))
[('hel', 'lo'), ('hel', 'bye'), ('lo', 'bye')]


3 commentaires

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.



23
votes

Votre exemple peut être écrit en python comme xxx

pour combiner la sortie aux chaînes à nouveau: xxx

Si vous intéressez le Mise en œuvre réelle de cette fonction, consultez le Documentation .


5 commentaires

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.



2
votes
a = ['hel', 'lo', 'bye']
print '\n'.join(''.join(x) for x in itertools.permutations(a, 2))

2 commentaires

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 :)



2
votes

facile en python avec itertools.

Voici l'exemple de permutation de jeton: p> xxx pré>

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)


1 commentaires

Il donne toutes les permutations de tous les caractères.



1
votes

Python a un permutations aussi. :)


0 commentaires

3
votes

Étant donné que d'autres langues sont acceptables:

hellobye
helbyelo
lohelbye
lobyehel
byehello
byelohel


0 commentaires

2
votes

On dirait que vous voulez permutations : xxx

sortie: xxx


0 commentaires