通过按值复制,在 Python 中创建一个没有 for 循环的重复元素的二维列表
By copy-by-value, create a 2-D list of duplicate elements without for-loops in Python
我要生成
[[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 循环的情况下以单行方式完成它?
这可以通过列表理解来完成:
P = [[0] * 3 for _ in range(3)]
我知道你 可能 并不是要排除在列表推导中使用 for
循环,但这是一个没有 for[ 这个词的答案=16=](因为...你可以?)
x = list(map(lambda p: [0]*3, [None]*3))
您可能需要查看 numpy
、
import numpy as np
array = np.zeros((3,3), dtype=int)
array[0][0] = 1
我要生成
[[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 循环的情况下以单行方式完成它?
这可以通过列表理解来完成:
P = [[0] * 3 for _ in range(3)]
我知道你 可能 并不是要排除在列表推导中使用 for
循环,但这是一个没有 for[ 这个词的答案=16=](因为...你可以?)
x = list(map(lambda p: [0]*3, [None]*3))
您可能需要查看 numpy
、
import numpy as np
array = np.zeros((3,3), dtype=int)
array[0][0] = 1