2014-05-15 62 views
4

所以我需要一個函數來生成一個從a增加到zzz的字母列表。在python中迭代a到zzz

應該是這樣的:

a 
b 
c 
... 
aa 
ab 
ac 
... 
zzx 
zzy 
zzz 

我目前擁有的代碼是這樣的:

for combo in product(ascii_lowercase, repeat=3): 
      print(''.join(combo)) 

然而,這並不只與3個字母增加,輸出更像

a 
ab 
abc 
abcd 
... 

因此,回顧一下: 功能,字母增加,當它經過z,我t返回到aa。 謝謝!


UPDATE:

我像以前一樣很具有相同輸出

。這裏是我試圖把它插入到:

a = hashlib.md5() 
for chars in chain(ALC, product(ALC, repeat=1), product(ALC, repeat=1)): 
    a.update(chars.encode('utf-8')) 
    print(''.join(chars)) 
    print(a.hexdigest()) 

我的哈希結束,如:

f1784031a03a8f5b11ead16ab90cc18e 

但我相信:

415290769594460e2e485922904f345d 

謝謝!

+0

是否必須按順序生成它們? – wnnmaw

+0

是的,這是必要的。 – user3642145

+0

你能否詳細說一下你想要用什麼? – wnnmaw

回答

5
from string import ascii_lowercase as ALC 
from itertools import chain, product 

for chars in chain(ALC, product(ALC, repeat=2), product(ALC, repeat=3)): 
    print(''.join(chars)) 

對問題UPDATE

我嘗試了所有的方法,但不能得到415290769594460e2e485922904f345d你提到你想到..所以我不知道你怎麼樣計算你的期望。

product      : 1a431d62ddd9e78e1b22f8245ad945d0 
permutations     : 52d2529adf73975a4ca82bc7e25db4c6 
combinations     : 52bf3fcd925b2fdc1c52df70b7e33cbb 
combinations_with_replacement : 421d5ff16fc211ae253fcc3e81eeb262 
+0

進一步壓縮:對於鏈中的字符(*(product(ALC,repeat = i + 1)for i in xrange(3))):...'。使用這個版本,可以刪除'ALC'別名,因爲標識符只被提及一次。 – user4815162342

+0

ofc可以做到這一點,但我絕對想避免雙重for-loops –

8

添加另一個循環:

for x in range(1, 4): 
    for combo in product(ascii_lowercase, repeat=x): 
     print(''.join(combo)) 

輸出如下:

a 
... 
aa 
... 
aaa 
... 
zzz 

...是一個巨大的組合數。