2017-08-31 6 views
0

J'ai une chaîne s = "abcde". Je veux générer toutes les permutations possibles et écrire leur fichier in txt. OUT Fichier.txtÉcrire toutes les combinaisons possibles d'un caractère dans une chaîne dans un fichier en utilisant Python

un b c d aa ab ac ad ae ba bb bc bd être ca cb cc cd CE da db dc dd de ch eb ed ec ee ... ... eeeda eeedb eeedc eeedd eeede eeeea eeeeb eeeec eeeed eeeee

je les itertools mais il commence toujours avec aaaaa.

+1

Partagez votre code s'il vous plaît. On dirait que vous avez juste besoin de générer les 'permutations' de longueur 1, puis 2, puis 3 etc ... jusqu'à la longueur que vous voulez, ce qui peut être fait facilement avec une boucle 'for'. – Julien

+0

Ce n'est pas permutations! montrez-nous votre code et la sortie attendue par rapport à la sortie réelle – alfasin

Répondre

-1

itertools.permutations prend 2 arguments, l'itératif et la longueur des permutations. Si vous ne spécifiez pas le second paramètre, il est par défaut len ​​(itérable). Pour obtenir toutes les longueurs, vous avez besoin d'imprimer des permutations pour chaque longueur:

import itertools 
s = "abcde" 
for i in range(len(s)): 
    for permutation in (itertools.permutations(s, i+1)): 
     print ("".join(permutation)) 

Source: https://docs.python.org/2/library/itertools.html#itertools.permutations

+0

Oui, en effet les permutations prennent deux éléments. J'écrivais à la hâte et j'ai oublié ça :) – campovski

+0

Ceci est incorrect selon les exigences de l'OP. –

-1
import itertools 

s="abcde" 

def upto_n(s,n): 

    out = [] 

    for i in range(1,n+1,1): 

     out += list(itertools.combinations(s, i)) 

    return out 

print upto_n(s,2) 
print upto_n(s,3) 

OutPut

[('a',), ('b',), ('c',), ('d',), ('e',), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('a', 'e'), ('b', 'c'), ('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e'), ('d', 'e')] 

[('a',), ('b',), ('c',), ('d',), ('e',), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('a', 'e'), ('b', 'c'), ('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e'), ('d', 'e'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'b', 'e'), ('a', 'c', 'd'), ('a', 'c', 'e'), ('a', 'd', 'e'), ('b', 'c', 'd'), ('b', 'c', 'e'), ('b', 'd', 'e'), ('c', 'd', 'e')] 
+0

Ceci est également incorrect pour la sortie de l'OP. Ils veulent aussi répéter des caractères. –

0

En utilisant itertools.product (yield from syntaxe disponible à partir PY3. 3):

import itertools 

def foo(x): 
    for i in range(1, len(x) + 1): 
     yield from(itertools.product(*([s] * i))) 

for x in foo('abc'): # showing you output for 3 characters, output explodes combinatorially 
    print(''.join(x)) 

a 
b 
c 
aa 
ab 
ac 
ba 
bb 
bc 
ca 
cb 
cc 
aaa 
aab 
aac 
aba 
abb 
abc 
aca 
acb 
acc 
baa 
bab 
bac 
bba 
bbb 
bbc 
bca 
bcb 
bcc 
caa 
cab 
cac 
cba 
cbb 
cbc 
cca 
ccb 
ccc 

Pour écrire dans un fichier, vous devez ouvrir un premier et appeler foo dans une boucle:

with open('file.txt', 'w') as f: 
    for x in foo('abcde'): 
     f.write(''.join(x) + '\n')