Найти - Пользователи
Полная версия: Непонятная ошибка
Начало » Python для новичков » Непонятная ошибка
1
Skatoro
При таком коде:
 a = [[], []]
a[1].append(1)
print(a)
Вывод:
 [[], [1]]
Вышло так, как и хотел, но если сделать иначе:
 ans = [[]]*5
arr = [4,1,3,2,5]
N=5
count = N*1
for i in range(N):
    if arr[i] == count:
        print("i = ", i,"    count = ",count)
        print(ans)
        ans[i].append(count)
        print(ans)
Вывод почему-то вместо того чтобы раз добавить в одну ячеку, добавляет сразу во все:
 i =  4     count =  5
[[], [], [], [], []]
[[5], [5], [5], [5], [5]]

AD0DE412
 ans[2] = count
к вопросу почему присоединяюсь … почему?
Skatoro
AD0DE412
Исправил
AD0DE412
ага
все дело в
 ans = [[]]*5
если
 ans = [[], [], [], [], []]
то получаем ожидаемое поведение
а если первый вариант получается что в начале делается append а уже потом * 5
хм приколная фича
PEHDOM
потому что операции над списками ссылочные, и умножая список на 5, вы получаете не 5 новых списков, а пять ссылок на один и тотже список.
 >>> lst=[1,2,3]
>>> lst
[1, 2, 3]
>>> incl_lst=[lst]*5
>>> incl_lst
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> lst[1]=100
>>> lst
[1, 100, 3]
>>> incl_lst
[[1, 100, 3], [1, 100, 3], [1, 100, 3], [1, 100, 3], [1, 100, 3]]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB