所以我想通过循环某种名称赋值语句或函数来创建变量。我想最终得到标题为“t1
,t2
,t3
”的变量等。我怎样才能完成
i = 1
while 1:
("t" + str(i)) = [0,0,0,0]
i = i + 1
看起来会这样。 (保持str("t")
在前面,而不是使第二个字符改变int(i)
。这是为了创建变量以便稍后放入数组而不必在代码中输入它们。)我是试图列出10,000个列表,每个列表包含4个元素。这更清楚了吗?
答案 0 :(得分:5)
不要试试。
相反,使用单个字典来保留所有值 - 您的标题可以是键:
my_dict = {}
for i in range(1, 4):
my_dict['t%s' % i] = foo
答案 1 :(得分:5)
虽然技术上可以做你想做的事,但这是一个非常糟糕的做法。这正是列出(或数组)的用例,你应该在这里使用一个。
基于您的代码示例,类似
t = [[0] * 4 for i in xrange(10000)]
(正如David Alber在评论中提到的)应该适合你;它将创建一个包含10000个列表的列表,每个列表包含4个元素。
P.S。在Python 3中,xrange
函数已重命名为range
。
答案 2 :(得分:3)
t = [[0] * 4] * 10000
有效,但可能不符合您的预期。它不是创建10000个列表的列表,而是创建一个包含10000个引用的列表到单个列表。看看当你尝试开始更改内部列表的元素时会发生什么:
>>> t = [[0] * 4] * 3
>>> t
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> t[0][0] = 1
>>> t
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
相反,以下可能是您所期望的:
>>> t = [[0] * 4 for _ in xrange(3)]
>>> t
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> t[0][0] = 1
>>> t
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
原因是乘以列表只会创建一个较长的列表,其中包含对原始列表中元素的多个引用。除非你知道列表包含完全不可变的对象(例如数字和字符串),否则这几乎不是一个好主意。这就是为什么在我的答案版本中使用[0] * 4
中的列表乘法仍然可以,即使[[0] * 4] * 10000
中的外部列表乘法是危险的。