увеличение размера строки через цикл - PullRequest
5 голосов
/ 15 мая 2010

Какой простой способ увеличить длину строки до произвольного целого числа x? как «а» идет к «z», а затем переходит к «аа», «zz», «ааа» и т. д.

Ответы [ 4 ]

6 голосов
/ 15 мая 2010

Это должно сработать:

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:

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
2 голосов
/ 15 мая 2010

Вот мое решение, похожее на решение Адама, только оно не рекурсивное. :].

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() полезным. Woot.)

0 голосов
/ 15 мая 2010

Определить х.Я использую x = 5 для этого примера.

x = 5
import string
for n in range(1,x+1):
  for letter in string.ascii_lowercase:
    print letter*n
0 голосов
/ 15 мая 2010

Вы можете умножить строку на целое число. Например

>>> 'a' * 2
'aa'
>>> 'a' * 4
'aaaa'
>>> 'z' * 3
'zzz'
>>> 'az' * 3
'azazaz'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...