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

Возможный дубликат:
Простой код 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
  • Python: удаление пробелов из объектов списка
  • Как удалить элемент из списка Python по значению?
  • Как удалить элемент из списка python, если условие True?
  • Python, инициализирующий список списков
  • list.extend и понимание списка
  •  
    Interesting Posts for Van-Lav

    Вызовите C ++ opencv-функции из Python (отправьте cv :: Mat в C ++ dll, использующую opencv)

    PyQt: как использовать QWebPage с анонимным прокси

    Как добавить трек в список воспроизведения iTunes с использованием Python и скриптового моста

    Установка Pygame для Mac OS X 10.6.8

    Python 3 – Zip – это итератор в кадре данных pandas

    Сравнение типов данных NumPy

    Программирование Pygame, чтобы я мог нажимать сразу несколько клавиш, чтобы заставить моего персонажа двигаться по диагонали

    Самый простой способ добавить функцию к существующему классу

    Использование Python 3 в virtualenv

    Установка PyGIMP в Windows

    Как определить конфигурационные переменные / константы в Google App Engine (Python)?

    Как обновить код с git до контейнера Docker

    коэффициенты интерполяции сплайна в scipy

    Загружайте часть документа только с помощью запросов python.

    Как выбрать подмножество из мультииндекса Dataframe на основе условий из другого DataFrame

    Python - лучший язык программирования в мире.