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

[[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?

1
y56 3 Май 2019 в 20:04

3 ответа

Лучший ответ

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

x = list(map(lambda p: [0]*3, [None]*3))
0
modesitt 3 Май 2019 в 17:26

Возможно, вы захотите заглянуть в numpy,

import numpy as np    
array = np.zeros((3,3), dtype=int)
array[0][0] = 1
0
Hamzza K 3 Май 2019 в 17:55

Это можно сделать с помощью понимания списка:

P = [[0] * 3 for _ in range(3)]
1
blhsing 3 Май 2019 в 17:09