我有一个字符串列表,例如:
names = ['apple','orange','banana']
我想为列表中的每个元素创建一个列表,将其精确命名作为字符串:
apple = []
orange = []
banana = []
如何在Python中做到这一点?
#1 楼
您可以通过创建一个dict
来做到这一点:fruits = {k:[] for k in names}
然后通过(例如:)
fruits['apple']
来访问每个-您不想走单独的变量之路! #2 楼
始终使用Jon Clements的答案。globals()
返回支持全局名称空间的字典,此时您可以将其像其他字典一样对待。您不应该这样做。这会导致名称空间受到污染,可以覆盖现有变量,并使调试由此产生的问题更加困难。for name in names:
globals().setdefault(name, [])
apple.append('red')
print(apple) # prints ['red']
您必须事先知道列表中包含“苹果”,以便稍后引用变量“苹果”,此时您可以正常定义该变量。因此,这在实践中没有用。鉴于Jon的答案还会产生字典,因此使用
globals
没有任何余地。评论
实际上,我更喜欢此解决方案,因为它允许我创建列表,而不是建议的字典。所以我想问为什么我宁愿使用@Jon Clements方法,而不要使用此方法?非常感谢你们俩!
–user1962851
2013年1月10日上午10:10
@ user1962851-globals()几乎是一个存放全局变量的字典。此解决方案可能导致对全局名称空间的不必要污染,并导致覆盖现有变量。如果您使用Jon的解决方案,则可以通过使用fruits ['apple']和类似的东西获得相同的列表,因此它没有太多缺点。
– root
13年1月10日在10:22
好的,非常感谢您的解释。然后,我将乔恩的答案设为接受的答案。
–user1962851
13年1月10日在10:50
评论
您的最终目标是什么?我问,因为您通常可以完成所需的操作而不必用这种方式命名大量变量。@DSM您能解释一下为什么您投票认为这不是骗子吗?谢谢!
@wim:当然!这是一年半以前。如果您要关闭另一个作为此项目的副本,或者将两个都关闭为较早版本的副本,那可能是有道理的。但是由于一个真实答案在两个方面都是相同的,所以我看不到这个问题是另一个问题的重复。
@DSM我没有打扰检查日期,也许我应该有(?)。我们正在meta上进行讨论。