2017-04-05 1 views
0
array='abcdcba' 
array=list(array) 
palindrome=[] 

for x in range (0,len(array)): 
    list1 = [] 
    list1.append(array[x]) 
    for y in range(x+1,len(array)): 
     list1.append(array[y]) 
     list2=list1[::-1] 
     if list1==list2: 
      palindrome.append(list1) 
print(palindrome) 

주어진 문자열에서 문장을 찾으려고하는데 이상한 행동을하고 있습니다.Palindrome python weird

내가 palindrome bcdcb를 찾을 때, palindrome 배열에 목록을 추가합니다. 다음 반복에서 list1에 새 값을 추가하면 그 값도 palindrome 목록에 추가됩니다. 그것 bcdcba 만들기

같은 일이 cdc에 일어난다; 그것을 cdcba로 인쇄합니다.

내가 갖는 출력은 다음과 같습니다

[['a', 'b', 'c', 'd', 'c', 'b', 'a'], ['b', 'c', 'd', 'c', 'b', 'a'], ['c', 'd', 'c', 'b', 'a']] 
+0

은'를 들어 y in ...'루프는 모든 반복에서 동일한'list1'을 계속 사용합니다. 'list1 = []'을 바깥 쪽 루프가 아닌 그 안쪽 루프에 넣으려고 했습니까? – TigerhawkT3

답변

1

일반적인 문제 : 당신은 (당신이 때까지 list1 = []으로 다시 초기화) 하나의 목록 list1 개체가 있습니다. 당신이 단지의 복사본을 만들, 당신이 발견 한 회문을 수정하지 않는 확인하려면 list1 당신이 그것을 추가하기 전에,이 방법은 나중에 변경되지 않습니다 복사 list1 수정할 때 첫째 :

array='abcdcba' 
array=list(array) 
palindrome=[] 

for x in range (0,len(array)): 
    list1 = [] 
    list1.append(array[x]) 
    for y in range(x+1,len(array)): 
     list1.append(array[y]) 
     list2=list1[::-1] 
     if list1==list2: 
      palindrome.append(list1[:]) # copy list1 
print(palindrome) 
+0

목록을 복사하는 방법은 틀림없이 더 좋습니다 (http://stackoverflow.com/a/2612815/3579910). – TemporalWolf