2010-05-14 3 views
5

문자열의 길이를 임의의 정수 x로 증가시키는 간단한 방법은 무엇입니까? 'a'와 같이 'z'로 이동 한 다음 'aa'에서 'za'to 'aaa'등으로 이동합니다.루프를 통한 문자열 크기 증가

+0

경우'에 오는 x'는 무엇입니까? 문자열이 "abc"이고 "x"가 4 인 것처럼 문자열은 "abg"가됩니까? –

+0

oops. 나는 x = 4 인 경우 문자열이 x 길이가됨을 의미합니다. 따라서 문자열은 'aaaa'... 'zzzz'가됩니다. – calccrypto

+0

[this code golf] (http://stackoverflow.com/questions/)을 참조하십시오. 2634427/code-golf-numeric-equivalent-of-excel-column-name /)을 사용하십시오. –

답변

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 

이 발전기를 돌려줍니다. 이 기능을 사용할 수 있습니다, 당신이 너무 짧은 문자열을 반복하려면

list(iterate_strings(5)) 

:

for s in 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

+0

거꾸로가는 문제가 해결되었습니다. 내 대답에 투표하십시오 :) – Adam

+0

나는 노력했지만, 분명히 나는 ​​15 평판이 필요하다. – calccrypto

0

정수의 문자열을 곱할 수 있습니다. 예 :

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

그래,하지만 모든 순열을 다뤄보고 싶다 – calccrypto

+0

내가 맞는지 알아 보자. 'aaaa'와 'zzzz'사이의 모든 문자열을 반복하고 싶다. ('aaaa', 'aaab', 'aaac' , .... 'zzzz'). – Adam

+0

이 맞습니다. 문자열이 x x chars 길이가 될 때까지 – calccrypto

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

처음에는 'letter * 0'을하기 때문에 그 코드를 사용하여 인쇄 된 첫 번째 것이 26 행의 공백이므로 범위 명령문의 시작 값을 설정할 수 있습니다. – Dustin

+0

매우 사실. 결정된. – tdedecko

2

내 솔루션은 재귀 적이 아니라는 점을 제외하고 Adam 's와 유사합니다. :].

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) 

그리고 당신이 for 루프를 사용할 수 있도록 그것을 반복하기 위해, generator 반환

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

재밌게!

(이. 우트. 오늘은 내가 유용 itertools.product()를 발견 한 두 번째 시간입니다)

관련 문제