有没有办法在循环中在python中生成变量名并为它们赋值?例如,如果我有
prices = [5, 12, 45]
Run Code Online (Sandbox Code Playgroud)
我想要
price1 = 5
price2 = 12
price3 = 45
Run Code Online (Sandbox Code Playgroud)
我可以在一个循环或某事做,而不是手动分配price1 = prices[0],price2 = prices[1]等等.
谢谢.
编辑
很多人建议我写一个要求这个的理由.首先,有些时候我认为这可能比使用列表更方便...我不记得确切的时间,但我想我已经想过在有很多级别的嵌套时使用它.例如,如果有一个列表列表,以上述方式定义变量可能有助于降低嵌套级别.其次,今天我在尝试学习使用Pytables时想到了这一点.我刚看到Pytables,我看到在定义表结构时,列名和类型按以下方式描述:
class TableFormat(tables.IsDescription):
firstColumnName = StringCol(16)
secondColumnName = StringCol(16)
thirdColumnName = StringCol(16)
Run Code Online (Sandbox Code Playgroud)
如果我有100列,则明确键入每列的名称似乎很多工作.所以,我想知道是否有办法动态生成这些列名.
kan*_*aka 40
如果你真的想要动态创建它们,你可以分配给globals()或locals()返回的dict,具体取决于你想要创建它们的命名空间:
globals()['somevar'] = 'someval'
print somevar # prints 'someval'
Run Code Online (Sandbox Code Playgroud)
但我不建议这样做.通常,避免全局变量.使用locals()通常只是模糊了你真正在做的事情.相反,创建自己的dict并分配给它.
mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']
Run Code Online (Sandbox Code Playgroud)
学习蟒蛇禅; 跑这个并且好好理解:
>>> import this
Run Code Online (Sandbox Code Playgroud)
Tim*_*Čas 31
虽然我没有看到太多意义,但这里是:
for i in xrange(0, len(prices)):
exec("price%d = %s" % (i + 1, repr(prices[i])));
Run Code Online (Sandbox Code Playgroud)
Ste*_*ini 19
在一个对象上,您可以实现此目的 setattr
>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5
Run Code Online (Sandbox Code Playgroud)
我遇到了你的问题,这是我的答案:
prices = [5, 12, 45]
list=['1','2','3']
for i in range(1,3):
vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])
Run Code Online (Sandbox Code Playgroud)
所以在打印时:
price1 = 5
price2 = 12
price3 = 45
Run Code Online (Sandbox Code Playgroud)
另一个例子,它实际上是另一个答案的变体,因为它也使用字典:
>>> vr={}
... for num in range(1,4):
... vr[str(num)] = 5 + num
...
>>> print vr["3"]
8
>>>
Run Code Online (Sandbox Code Playgroud)