2017-04-05 74 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) 

我想找到給定的字符串中的迴文,我遇到奇怪的行爲。迴文蟒奇怪

當我找到迴文bcdcb時,我將列表追加到迴文數組中。 然後,當我在下一次迭代中向list1添加新值時,該值也會附加到迴文列表中;使其成爲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