如何在Python中初始化二维数组?
我刚开始学习Python,想用一个二维列表,最开始我把每个位置都填上了同一个变量。我想出了这个方法:
def initialize_twodlist(foo):
twod_list = []
new = []
for i in range (0, 10):
for j in range (0, 10):
new.append(foo)
twod_list.append(new)
new = []
这个方法能得到我想要的结果,但感觉有点绕。有没有更简单、更短、更优雅的方法呢?
31 个回答
273
你可以使用一种叫做 列表推导式 的方法:
x = [[foo for i in range(10)] for j in range(10)]
# x is now a 10x10 array of 'foo' (which can depend on i and j if you want)
593
在Python中,要初始化一个二维列表,可以使用
t = [ [0]*3 for i in range(3)]
但是不要使用 [[v]*n]*n
,这会让你掉进一个陷阱里!
>>> a = [[0]*3]*3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][0]=1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
418
在Python中,常常会出现这样一种写法:
bar = []
for item in some_iterable:
bar.append(SOME EXPRESSION)
这促使了列表推导式的引入,它可以把上面的代码简化成:
bar = [SOME_EXPRESSION for item in some_iterable]
这样写更简洁,有时候也更容易理解。通常,你会逐渐习惯识别这种写法,并且经常用列表推导式来替代循环。
你的代码中就出现了这种模式两次:
twod_list = [] \
for i in range (0, 10): \
new = [] \ can be replaced } this too
for j in range (0, 10): } with a list /
new.append(foo) / comprehension /
twod_list.append(new) /