我开始使用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 = []
它给出了预期的结果,但感觉像是一种变通方法。有更简单/更短/更优雅的方法吗?
如果你使用numpy,你可以很容易地创建2d数组:
import numpy as np
row = 3
col = 5
num = 10
x = np.full((row, col), num)
x
array([[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]])
要在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]]
你可以这样做:
[[element] * numcols] * numrows
例如:
>>> [['a'] *3] * 2
[['a', 'a', 'a'], ['a', 'a', 'a']]
但这有一个不受欢迎的副作用:
>>> b = [['a']*3]*3
>>> b
[['a', 'a', 'a'], ['a', 'a', 'a'], ['a', 'a', 'a']]
>>> b[1][1]
'a'
>>> b[1][1] = 'b'
>>> b
[['a', 'b', 'a'], ['a', 'b', 'a'], ['a', 'b', 'a']]