Скопируйте по значению, создайте двумерный список повторяющихся элементов без циклов for в Python - PullRequest
1 голос
/ 03 мая 2019

Я хочу сгенерировать

[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]

, где все элементы являются независимыми значениями, не связанными ссылками.

Хотя это может быть достигнуто с помощью

P = []
for i in range(3):
    P.append([0] * 3)

Все еще надеемся, что это можно сделать без использования циклов for .

Я пытался P = [[-1] * 3] * 3. Однако три [0, 0, 0] фактически ссылаются на один и тот же объект. Переназначение P[0][0] = 1 приводит к

[[1, 0, 0],
 [1, 0, 0],
 [1, 0, 0]]

вместо желаемого результата

[[1, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]

Итак, есть ли способ сделать это в стиле одной строки без циклов for?

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Это может быть сделано с пониманием списка:

P = [[0] * 3 for _ in range(3)]
0 голосов
/ 03 мая 2019

Вы можете посмотреть на numpy,

import numpy as np    
array = np.zeros((3,3), dtype=int)
array[0][0] = 1
0 голосов
/ 03 мая 2019

Я знаю, что вы , вероятно, не имели в виду исключить использование for циклов внутри списка, но вот ответ без слова для (потому что ... вы можете?)

x = list(map(lambda p: [0]*3, [None]*3))
...