2013-11-22 79 views
1

這個程序爲什麼會輸出[5,5,5,[1,3,'Hello','Barney']]而不是5,5,5給出了意外的結果集?

aList=[1,3,"Hello","Barney"] 
bList=[5,5,5] 
aList.append(bList) 
if(5 in aList): 
print(aList) 
else: 
aList.pop().append(aList) 
print(bList) 
+1

你的代碼以一種稍微複雜的方式執行'bList.append(aList)'。 – Matthias

回答

2

附加bListaList,然後再彈出它關閉,附加aListbList

這裏是通過步驟發生步驟:

  1. aList.append(bList)添加bList作爲一個單一的值來aList; aList現在是:

    >>> aList=[1,3,"Hello","Barney"] 
    >>> bList=[5,5,5] 
    >>> aList.append(bList) 
    >>> aList 
    [1, 3, 'Hello', 'Barney', [5, 5, 5]] 
    

    注意嵌套列表; list.append()將參數作爲目標列表中的單個條目添加。

  2. 然後測試5是否在aList;它不是,它是在一個嵌套列表:

    >>> 5 in aList 
    False 
    >>> 5 in aList[-1] 
    True 
    
  3. else分支使用list.pop()以除去最後一個元素,這是一個整體嵌套列表,並追加aList它; bList仍然是指最後的名單:

    >>> temp = aList.pop() 
    >>> temp 
    [5, 5, 5] 
    >>> temp is bList 
    True 
    >>> temp.append(aList) 
    >>> bList 
    [5, 5, 5, [1, 3, 'Hello', 'Barney']] 
    

你可能想延長aList代替,加入剛剛元素bListaList

>>> aList=[1,3,"Hello","Barney"] 
>>> bList=[5,5,5] 
>>> aList.extend(bList) 
>>> aList 
[1, 3, 'Hello', 'Barney', 5, 5, 5] 

現在5 in aListTrue ,並且bList不會受到影響。

+0

我很少看到這麼好解釋的答案:-) – Grimmy

0

因爲,aList.pop()實際上返回bList,並且您將aList的內容附加到它。