Python中有没有办法在不使用循环的情况下初始化多维数组/列表?
答案 0 :(得分:13)
当然是的一种方式
arr = eval(`[[0]*5]*10`)
或
arr = eval(("[[0]*5]+"*10)[:-1])
但它太可怕了,所以每个人都使用循环(通常是列表理解)或者是numpy
答案 1 :(得分:9)
根据您的实际需求,事实上的“标准”套餐Numpy可能会为您提供您所需要的。
您可以使用
创建一个多维数组numpy.empty((10, 4, 100)) # 3D array
(使用任意值初始化)或使用
创建与零相同的数组numpy.zeros((10, 4, 100))
Numpy非常快,适用于阵列操作。
答案 2 :(得分:7)
当然,你可以做到
mylist = [
[1,2,3],
[4,5,6],
[7,8,9]
]
答案 3 :(得分:4)
以下内容不使用任何特殊库,也不使用eval:
arr = [[0]*5 for x in range(6)]
并且它不会创建重复的引用:
>>> arr[1][1] = 2
>>> arr
[[0, 0, 0, 0, 0],
[0, 2, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
答案 4 :(得分:3)
我不相信这是可能的。
您可以这样做:
>>> a = [[0] * 5] * 5
创建一个5x5矩阵,但它是重复的对象(你不想要的)。例如:
>>> a[1][2] = 1
[[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]]
你几乎肯定需要使用某种循环,如:
[[0 for y in range(5)] for x in range(5)]
答案 5 :(得分:3)
递归是你的朋友:D
这是一个非常天真的实现,但它确实有效!
dim = [2, 2, 2]
def get_array(level, dimension):
if( level != len(dimension) ):
return [get_array(level+1, dimension) for i in range(dimension[level])]
else:
return 0
print get_array(0, dim)
答案 6 :(得分:2)
这取决于你将数组初始化的内容,但肯定。您可以使用列表推导来创建一个5×3数组,例如:
>>> [[0 for x in range(3)] for y in range(5)]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> [[3*y+x for x in range(3)] for y in range(5)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14]]
是的,我想这仍然有循环 - 但这一切都在一行中完成,我认为这是你问题的预期含义?
答案 7 :(得分:2)
a = [[]]
a.append([1,2])
a.append([2,3])
然后
>>> a
[[1, 2], [2, 3]]
答案 8 :(得分:1)
如果你正在使用Numpy做数值工作,比如
x = numpy.zeros ((m,n))
x = numpy.ones ((m,n))
答案 9 :(得分:1)
Python没有数组。它有其他序列类型,从列表到字典,不会忘记集合 - 正确的序列类型取决于您的特定需求。
假设您的“数组”实际上是一个列表,“初始化”意味着分配 NxM 元素的列表列表,您可以(伪代码):
你说你不想循环,排除前两点,但为什么呢? 你也说你不想把事情写下来(回应雅各布),你怎么会这样做呢?我不知道有任何其他方式来获取数据结构,而无需在任何编程语言中以较小的部分(循环)或明确地将其写下来。
另外请记住,初始化但空的列表并不比没有列表更好,除非您将数据放入其中。而且在放入数据之前你不需要初始化它......
如果这不是理论上的练习,你可能会提出错误的问题。我建议您解释一下该数组需要做什么。
答案 10 :(得分:0)
您可以通过这种方式进行:
首先不使用任何循环:
[[0] * n] * m
第二次使用简单的内联列表理解:
[[0 for column in range(n)] for row in range(m)]
答案 11 :(得分:-2)
您可以使用N维数组(ndarray)。这是文档的链接。 http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html