2017-01-18 4 views
0

이것이 반복이 작동하지 않는 이유는 무엇입니까? while 루프에서 단어가 범위 (len (단어))로 바뀌면 동일하게 작동합니다.for 루프를 사용하여 파이썬에서 문자열 반복하기

n = ["Michael", "Lieberman"] 

def join_strings(words): 
    result = "" 
    for i in words: 
     result += words[i] 
    return result 

print join_strings(n) 
+0

루프에'print (i)'를 추가하면'i'가 생각한 것과 다르다는 것을 알 수 있습니다. 명확한 설명을 해주신 덕분에 – DyZ

+0

@ tarashypka에게 감사드립니다. rangefunction() 함수를 사용하지 않고 대답을 얻으려면 대체 코드를 제안하십시오. –

답변

2

코드를 입력하십시오. 목록에서 문자열을 결합의

n = ["Michael", "Lieberman"] 

def join_strings(words): 
    # words = ["Michael", "Lieberman"] 
    result = "" 
    for i in words: 
     # i = 'Michael' for the first iteration. 
     # if you do range(len(words)) then i=0 and words[0] is valid then 
     result += words[i] #<--Error! i='Michael' and you can't do words['Michael'] 
    return result 

print join_strings(n) 

파이썬 방법 :

print ''.join(n) #Outputs --> MichaelLieberman 
+2

문자열 연결을 사용하는 것은 성능이 좋지 않으며 모든 비용을 들이지 않아도 피할 수없는 문제입니다. –

0

i은 문자열 값이 아닌 인덱스입니다. 당신은 enumerate 기능을 사용할 수 있습니다

for index, i in enumerate(words): 
    result += words[index] 

또는 당신은 단지 단어 자체를 사용할 수 있습니다

for i in words: 
    result += i 

성능 :

In [14]: timeit.timeit('string_cat', '''def string_cat(): 
    ...:  rg = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 
    ...: 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
    ...:  st = '' 
    ...:  for x in rg: st += x 
    ...: ''', number=1000000) 
Out[14]: 0.02700495719909668 

In [15]: timeit.timeit('string_cat', '''def string_cat(): 
    ...:  rg = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 
    ...: 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
    ...:  st = ''.join(rg) 
    ...: ''', number=1000000) 
Out[15]: 0.026237964630126953 
+2

첫 번째 솔루션은 지옥과 같은 unpythonic이며 둘 다 매우 비효율적입니다. 해당 코드를 사용하지 마십시오. –

+0

@ Jean-FrançoisFabre : 놀랍게도 테스트를 마치면 문자열 연결이 반드시 가입보다 나쁜 것은 아닙니다. 내가 말했듯이, 나는 분명히 나 자신을 더 좋아한다. – 2ps

+1

큰 문자열로 _real_ 테스트를 수행해야합니다. 재 할당/메모리 복사가 실제 문제입니다. 나는 거기에 있었다. 그리고 문자열은 불변이므로 내부에서 약간 도움이되지 않습니다. –

0

이 같은 루프에 사용 r에있는 경우 :

for i in words: 

은 다음과 같이 수행

result += i 

때문에 여기에 우리가 직접 범위를 언급하지 않고 목록에서 값을 복용하거나 크기입니다.

UR이 같은 for 루프를 사용하는 경우 : 다음과 같이 할

for i in range(len(words)): 

:

result += words[i] 

과 출력 모두의 경우에서 동일합니다 : 더 나은

MichaelLieberman 

for 루프에 대한 설명은 다음을 참조하십시오 : https://www.learnpython.org/en/Loops

관련 문제