Python создание и заполнение двумерного массива

Я недавно в питоне и непонятно вот что, при создании массива таким способом:

b = [[0] * 2] * 2
И заполнении:
for i in range(w):
    for r in range(l):
        print(i,r)
        b[i][r] = str(i) + str(r)

Массив заполняется не 00; 01; 10; 11, а 10; 11; 10; 11.

Почему так?
  • Вопрос задан
  • 127184 просмотра
Решения вопроса 3
nivs
@nivs
Пример без numpy, вообще без внешних библиотек
#!/usr/bin/env python3
a = 3
b = 5
r = 0  # Чтобы было, чем заполнять
mas = []
for i in range(a):
    mas.append([])
    for j in range(b):
        mas[i].append(r)
        r += 1  # Чтобы заполнялось не одно и тоже

print(mas)
# [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]
Ответ написан
@Bce_OK
ты создаешь список, а потом умножаешь его на 2, таким образом он не клонируется, а копируется сам объект со всеми его адресами, поэтому b[0][0] == b[1][0] и b[0][1] == b[1][1], так как у тебя в b[0] находится тот же объект что и в b[1].
Если хочешь создавать многомерные массивы используй:
b = numpy.array(range(4))
b.shape = (2,2)
Ответ написан
adugin
@adugin Куратор тега Python
>>> dx = 2
>>> dy = 3
>>> matrix = [[0 for x in xrange(dx)] for y in xrange(dy)]
>>> matrix
[[0, 0], [0, 0], [0, 0]]
>>> matrix[0][0] = 1
>>> matrix
[[1, 0], [0, 0], [0, 0]]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Дополню @Bce_OK примером:

>>> a = [[0] * 2] * 2
>>> a
[[0, 0], [0, 0]]
>>> a[0][0] = 1
>>> a
[[1, 0], [1, 0]]
>>>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы