2013-11-22 2 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

Вы приложилиbList к aList, затем совал его снова и приложил aList к bList.

Вот что происходит шаг за шагом:

  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 вместо этого, добавляя только те элементы из bList в aList:

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

Теперь 5 in aList является True , и bList не пострадает.

+0

Я редко вижу такой хорошо объясненный ответ :-) – Grimmy

0

Потому что, aList.pop() фактически возвращает bList, и вы добавляете к нему содержимое aList.

Смежные вопросы