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