изменение элемента в списке списков

Возможный дубликат:
Простой код python о двойной петле

Я застрял в хорошо известной проблеме изменения 1 позиции в списке списков. Мне нужно использовать список фиксированных размеров списка.

Если я использую:

In [21]: a=[[2]*2]*3 In [22]: a Out[22]: [[2, 2], [2, 2], [2, 2]] In [23]: a[0][0]=1 In [24]: a Out[24]: [[1, 2], [1, 2], [1, 2]] 

Но если я определяю список списка следующим образом, он работает:

 In [26]: a = [ ....: [2,2], ....: [2,2], ....: [2,2], ....: ] In [27]: a Out[27]: [[2, 2], [2, 2], [2, 2]] In [28]: a[0][0]=1 In [29]: a Out[29]: [[1, 2], [2, 2], [2, 2]] 

Мне строка 22 и 27 выглядит одинаково. Так в чем разница?

Может ли кто-нибудь объяснить мне, как решить эту проблему и, в частности, как изменить код, который меняет один элемент списка списка? Если это невозможно, любое предложение перейти к другой структуре данных, позволяющей это? благодаря

One Solution collect form web for “изменение элемента в списке списков”

Существует принципиальное различие в двух способах определения матрицы в обоих образцах кода. В первом (строка 21), когда вы умножаете внешний список на 3, вы фактически умножаете ссылки на внутренний список.

Вот пример с параметрами:

 a = [2,2] b = [a] * 3 b => [a, a, a] => [[2,2], [2,2], [2,2]] 

Как вы можете видеть, численное представление b – это то, что вы ожидаете, но на самом деле оно содержит 3 ссылки на a . Поэтому, если вы меняете один из внутренних списков, все они меняются, потому что они фактически являются одним и тем же списком.

Вместо умножения вам нужно клонировать списки, делающие что-то вроде этого

 new_list = old_list[:] 

или

 new_list = list(old_list) 

В случае вложенных списков это можно сделать с помощью циклов.

  • Преобразуйте список Python со строками в нижний или верхний регистр.
  • Python, как отсортировать этот список?
  • Разница между del, удаление и поп в списках
  • Неправильно ли использовать оператор «==» по сравнению с пустым списком?
  • Как конкатенировать два элемента списка в Python?
  • Python: создание нового списка из существующего путем удаления каждого n-го элемента
  • Python - удаление перекрывающихся списков
  • Проверить, является ли объект списком списка в python?
  • Как удалить повторяющиеся значения в списке?
  • Создание списка отдельных элементов списка, умноженных n раз
  • Что такое эллипс в списке Python?
  • Python - лучший язык программирования в мире.