Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 04.08.2020
Сообщений: 10

Проблемы с вложенными списками (2д массив)

04.08.2020, 13:50. Показов 1465. Ответов 4

Студворк — интернет-сервис помощи студентам
Очень странное поведение при попытке вставки в матрицу новую "колонку":

Python
1
2
3
4
5
6
7
8
>>> g = [[0]*3]*4
>>> g
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> for n in g:
...     n.append(42)
... 
>>> g
[[0, 0, 0, 42, 42, 42, 42], [0, 0, 0, 42, 42, 42, 42], [0, 0, 0, 42, 42, 42, 42], [0, 0, 0, 42, 42, 42, 42]]
Желаемый результат:

Python
1
2
>>> g
[[0, 0, 0, 42], [0, 0, 0, 42], [0, 0, 0, 42], [0, 0, 0, 42]]
Подскажите пожалуйста где я тут сглупил?
(искал по форуму, бегло, : "Проблемы с вложенными списками Python", через гугл, подходящего ничего не нашел. Изучаю Python, недавно.)

Версия:
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2020, 13:50
Ответы с готовыми решениями:

Работа с вложенными списками
Подскажите пожалуйста: есть список ], ], , ], , ], , ]] как добиться вида: , , , , , , ] ?

Работа с вложенными списками
Есть 2 класса, первый Job хранит в себе список второго JobTitle Задача в том чтобы при нажатии на елемент списка Job в втором списке...

Организовать работу с вложенными списками
Добрый день , нужна помощь. Не могу понять как организовать и работать со вложенными списками (и какие списки считаются вложенными). ...

4
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.08.2020, 14:12
Лучший ответ Сообщение было отмечено black_Duck как решение

Решение

Python
1
g = [[0] * 3 for _ in range(4)]
Добавлено через 57 секунд
А проблема вот в чём:
Python
1
2
3
4
5
6
7
8
>>> a = [0, 0, 0]
>>> b = [a, a]
>>> b
[[0, 0, 0], [0, 0, 0]]
>>> b[0][0] = 5
>>> b
[[5, 0, 0], [5, 0, 0]]
>>>
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
05.08.2020, 13:06
А если копировать списки, то все норм:

Python
1
2
a=[0,0,0]
b=[a.copy(),a.copy()]
1
32 / 28 / 5
Регистрация: 02.08.2020
Сообщений: 132
Записей в блоге: 1
05.08.2020, 13:46
black_Duck, проблемма в том что у питона есть разделение на изменяемые и не изменяемые типы. К примеру
Python
1
2
3
4
5
6
7
8
9
10
a=[1,2,3]
b=a
b[0]=0
print(a) 
[0,2,3]
#но
c=list(a)
c[2]=2
print(a,c)
[0,2,3][0,2,2]
То есть у тебя три копии одного и тогоже списка т.е. объединённые в новый список
1
0 / 0 / 1
Регистрация: 04.08.2020
Сообщений: 10
06.08.2020, 16:11  [ТС]
Спасибо большое Userganz, Catstail, Рыжий Лис!
p.s.
Оказалось оператор среза не копирует тоже вложенные.
Python
1
2
3
4
5
6
7
8
l=[[0]*4]
l.extend(l[:])
l.extend(l[:])
l
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
l[0][2]=42
l
[[0, 0, 42, 0], [0, 0, 42, 0], [0, 0, 42, 0], [0, 0, 42, 0]]
Приходится явно copy(l) или deepcopy(l). Очень необычное поведение.
(Видимо плохо помню раздел что описывал тему...или специфику языка точнее.)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2020, 16:11
Помогаю со студенческими работами здесь

Сортировка списка с вложенными списками
Здравствуйте, получаю список с списками такого формата: , , , , , ] Мне нужно отсортировать списки внутри по второму элементу...

Создание вертикального меню с вложенными списками
Всем привет Я не очень давно знаком с css html поэтому столкнулся с проблемой Переделываю стандартный шаблон opencart 3 а точнее...

Как сделать копию списка с вложенными списками?
Добрый день. Столкнулся с необъяснимым результатом при клонировании листа. В этой книжке...

Вычисление суммы списка с вложенными списками посредством рекурсии
Добрый вечер. Занимаюсь самоизучением Python и столкнулся с рекурсивными функциями. Пример был такой def list_sum(list1): if...

Как создать структуру разных типов с вложенными списками?
class a { class b { List<T> list=new List<T>; } class c { List<T> list=new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru