Je sais que dans Python, je peux facilement créer une liste contenant toutes les permutations d'une chaîne donnée à l'aide de la fonction Exemple: P>
Toute suggestion sera appréciée. Merci d'avance. P> permutations () code>. Imaginez maintenant si je voulais générer uniquement les permutations de la chaîne
"3212323" code> qui ne contiennent pas la chaîne
"33" code>. Comment puis-je atteindre ce résultat? P>
4 Réponses :
solution avec filtre personnalisé C'est python afin que vous puissiez voir le code source et le modifier p>
Dans votre première option, vous pouvez également utiliser filtreFalse (prédicat, iérêtant) A> fonction de iTerTools et modifier la fonction de filtrage en renvoyer '33' in'join (Temp) code> Vérification si un élément existe dans le déséquilibre devrait être plus rapide que la vérification si ce n'est pas
@Oleg sûr de pouvoir poster une autre réponse
Merci! Cela m'a beaucoup aidé.
Vous pouvez utiliser des générateurs:
original = "3212323" excluded_substring = '33' p = (''.join(x) for x in permutations(original)) p = (x for x in p if excluded_substring not in x) # Or as a one-liner p = (x for x in (''.join(parts) for parts in permutations(original)) if excluded_substring not in x)
Si vous regardez la documentation de Permutations , Ils vous donnent quelle est la fonction essentiellement. Vous pouvez modifier cela pour exclure '33 ' code>
Semblable à _mads première option, vous pouvez également utiliser le FilterFalse (prédicat, itérable) fonction de iTerTools:
from itertools import permutations, filterfalse _str = "3212323" def predicate(iterable): return '33' in ''.join(iterable) filterfalse(predicate, permutations(_str)))
Tout d'abord générer toutes les chaînes avec un seul
3 code> puis mettre
3 code> dans des positions qui ne sont pas proches d'un autre
3 code>.