繁体   English   中英

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

[英]How can I create variables by iterating through a combination of integers and strings?

所以我想通过遍历某种名称分配语句或函数来创建变量。 我想结束标题为“ t1t2t3 ”等的变量。如何完成

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

看起来会做。 (将str("t")放在最前面,而不是将第二个字符更改为int(i) 。这是为了创建变量,以便稍后将其放入数组中,而不必在代码中键入它们。)尝试制作10,000个列表,每个列表包含4个元素。 这更清楚吗?

不要尝试

而是使用一个字典来保留所有值-您的标题可以是键:

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

尽管从技术上讲可以做您想做的事,但这是一种非常糟糕的做法。 这正是列表(或数组)用于的用例,您应该在这里使用一个。

根据您的代码示例,类似

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

(如大卫·阿尔伯(David Alber)在评论中所述)应该为您工作; 它将创建一个包含4个元素的10000个列表的列表。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM