2013-11-22 55 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的内容附加到它。