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



所以我想通过循环一些名称赋值语句或函数来创建变量。我希望最终拥有名为"t1, t2, t3"等的变量。我怎样才能完成

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

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

虽然技术上可以做您想做的事情,但这是一种非常糟糕的做法。这正是创建列表(或数组)的目的所在,您应该在这里使用列表(或数组)。

根据您的代码示例,如

t = [[0] * 4 for i in xrange(10000)]

(正如David Alber在评论中提到的)应该对你有用;它将创建一个包含10000个列表的列表,每个列表包含4个元素。

注:在Python 3中,xrange函数已重命名为range

别试了

相反,使用一个字典来保存所有的值-你的标题可以是键:

my_dict = {}
for i in range(1, 4):
    my_dict['t%s' % i] = foo

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

最新更新