2010-05-14 65 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()有用。活泉。)