如何在Python循环中重命名变量

6
我想在Python中运行一个程序,循环多次,每次创建一个新的数组 - 即不覆盖任何数据 - 并用循环编号给数组命名,以便我可以在后续循环中调用它。例如,我可能想要在从0到i的循环中创建x0、x1、x2、...、xi等数组,然后在另一个循环中调用这些数组,该循环也运行在相同的变量上。这本质上相当于能够将变量放入字符串中,如'string %d %(x)'。请保留HTML标记。

15
最好的方法不是这样做...而是使用一个列表(或字典)代替。 - jamylak
3
你的问题在于你在应该使用列表或字典的地方使用了局部变量 而不是 - Martijn Pieters
4个回答

8

你可以通过访问globals()字典来引入新的变量。例如:

for i in range(0,5):
    globals()['x'+str(i)] = i

在这个循环之后,您将获得:
>>> x0, x1, x2, x3, x4
(0, 1, 2, 3, 4)

注意,根据文档,不应使用locals()字典,因为对它的更改可能不会影响解释器使用的值。


1
除了对于 locals() 不起作用之外,它可以正常工作。 - John La Rooy
是的,我已经改变了我的答案。虽然它似乎可以工作,但如果你只引入新变量(并且之后不改变它们的值),那么... - MartinStettner
3
注意:任何阅读此答案的人,请不要做这样愚蠢的事情。正确的解决方案是使用字典或列表。 - bruno desthuilliers
我并没有建议这是做任何事情的好方法。但我相信这是对一个完全有效的原始问题的正确答案。也许你想重新阅读一下关于在SO中投票的部分... - MartinStettner
1
@brunodesthuilliers 有几种情况下修改全局环境可能是有意义的(毕竟存在 globals() 字典也许有其原因...)。不了解更多信息,你不能确定这是否适用于此处。 - MartinStettner

2
使用字典:
arraysDict = {}
for i in range(0,3):
    arraysDict['x{0}'.format(i)] = [1,2,3]

print arraysDict
# {'x2': [1, 2, 3], 'x0': [1, 2, 3], 'x1': [1, 2, 3]}
print arraysDict['x1']
# [1,2,3]

使用列表:
arraysList = []
for i in range(0,3):
    arraysList.append([1,2,3])

print arraysList
# [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
print arraysList[1]
# [1, 2, 3]

2

依赖变量名并更改它们不是最好的选择。

正如评论中已经指出的那样,使用字典或列表会更好。


0
你可以创建一个对象,然后使用setattr函数来实现。 基本上,它的工作原理如下:
setattr(myobject, 'string', value)

这与执行以下操作相同:myobject.string = value


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接