如何通过迭代整数和字符串的组合来创建变量?

时间:2011-11-14 19:05:26

标签: python variables loops

所以我想通过循环某种名称赋值语句或函数来创建变量。我想最终得到标题为“t1t2t3”的变量等。我怎样才能完成

i = 1
while 1:
    ("t" + str(i)) = [0,0,0,0]
    i = i + 1

看起来会这样。 (保持str("t")在前面,而不是使第二个字符改变int(i)。这是为了创建变量以便稍后放入数组而不必在代码中输入它们。)我是试图列出10,000个列表,每个列表包含4个元素。这更清楚了吗?

3 个答案:

答案 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中的外部列表乘法是危险的。