Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2021 12:39:00

Skatoro
Зарегистрирован: 2021-05-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная ошибка

При таком коде:

 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]]

Отредактировано Skatoro (Май 21, 2021 14:22:26)

Офлайн

#2 Май 21, 2021 13:29:38

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Непонятная ошибка

 ans[2] = count
к вопросу почему присоединяюсь … почему?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#3 Май 21, 2021 14:23:13

Skatoro
Зарегистрирован: 2021-05-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная ошибка

AD0DE412
Исправил

Офлайн

#4 Май 21, 2021 15:48:23

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Непонятная ошибка

ага
все дело в

 ans = [[]]*5
если
 ans = [[], [], [], [], []]
то получаем ожидаемое поведение
а если первый вариант получается что в начале делается append а уже потом * 5
хм приколная фича



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#5 Май 21, 2021 16:38:03

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Непонятная ошибка

потому что операции над списками ссылочные, и умножая список на 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]]
>>>



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 21, 2021 16:38:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version