2010-05-14 46 views
5

什麼是將字符串的長度增加到任意整數x的簡單方法?像'a'轉到'z',然後轉到'aa'到'zz'到'aaa'等。通過循環增加字符串大小

+0

哪裏'x'進來嗎?就像字符串是「abc」而「x」是4,字符串變成「abg」? – 2010-05-14 23:36:24

+0

oops。我的意思是說,字符串變成x長,所以如果x = 4,字符串將是'aaaa'...''zzzz' – calccrypto 2010-05-14 23:38:04

+0

有點相關,請參閱[this code golf](http://stackoverflow.com/questions/) 2634427 /代碼高爾夫球數字相當於-的-AN-Excel的列名稱/)。 – 2010-05-15 12:36:15

回答

6

這應該做的伎倆:

def iterate_strings(n): 
    if n <= 0: 
     yield '' 
     return 
    for c in string.ascii_lowercase: 
     for s in iterate_strings(n - 1): 
      yield c + s 

它返回一個發電機。 您可以用迭代它的循環:

for s in iterate_strings(5) 

或取得字符串列表:如果你想遍歷短串過

list(iterate_strings(5)) 

,您可以使用此功能:

def iterate_strings(n): 
    yield '' 
    if n <= 0: 
     return 
    for c in string.ascii_lowercase: 
     for s in iterate_strings(n - 1): 
      yield c + s 
+0

儘管它倒退,很酷! – calccrypto 2010-05-14 23:52:11

+0

修復了倒退的問題。 我的回答請投票:) – Adam 2010-05-14 23:53:59

+0

我試過了,但顯然我需要15個聲望 – calccrypto 2010-05-15 00:02:10

0

您可以乘以整數中的字符串。 例如

>>> 'a' * 2 
'aa' 
>>> 'a' * 4 
'aaaa' 
>>> 'z' * 3 
'zzz' 
>>> 'az' * 3 
'azazaz' 
+0

是的,但我想穿過所有的排列組合 – calccrypto 2010-05-14 23:38:58

+0

讓我們看看我是否正確:您想遍歷'aaaa'和'zzzz'之間的所有字符串,('aaaa','aaab','aaac' ,....'zzzz')。 – Adam 2010-05-14 23:43:00

+0

正確。直到字符串爲x字符長 – calccrypto 2010-05-14 23:48:03

0

定義x。本例中我使用x = 5

x = 5 
import string 
for n in range(1,x+1): 
    for letter in string.ascii_lowercase: 
    print letter*n 
+0

您可能想要設置範圍語句的起始值,因爲使用該代碼打印的第一件事物是26行空格,因爲您首先執行了「letter * 0」。 – Dustin 2010-05-14 23:44:00

+0

非常真實。固定。 – tdedecko 2010-05-14 23:46:25

2

這是我的解決方案,類似於亞當的,除非它不遞歸。 :]

from itertools import product 
from string import lowercase 

def letter_generator(limit): 
    for length in range(1, limit+1): 
     for letters in product(lowercase, repeat=length): 
      yield ''.join(letters) 

,它返回一個generator,所以你可以使用一個for循環遍歷它:

for letters in letter_generator(5): 
    # ... 

玩得開心!

(這是今天第二次我發現itertools.product()有用。活泉。)