Почему эта программа дает выход [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)
Почему эта программа дает выход [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)
Вы приложилиbList
к aList
, затем совал его снова и приложил aList
к bList
.
Вот что происходит шаг за шагом:
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()
добавляет аргумент как одну запись в целевой список.
Затем вы проверяете, если 5
находится в aList
; это не так, он находится в списке на вложенной:
>>> 5 in aList
False
>>> 5 in aList[-1]
True
Филиал 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
не пострадает.
Я редко вижу такой хорошо объясненный ответ :-) – Grimmy
Потому что, aList.pop()
фактически возвращает bList
, и вы добавляете к нему содержимое aList
.
Ваш код 'bList.append (aList)' немного сложным образом. – Matthias