我有一个字符串列表,例如:

names = ['apple','orange','banana'] 


我想为列表中的每个元素创建一个列表,将其精确命名作为字符串:

apple = []  
orange = []  
banana = []  


如何在Python中做到这一点?

评论

您的最终目标是什么?我问,因为您通常可以完成所需的操作而不必用这种方式命名大量变量。

@DSM您能解释一下为什么您投票认为这不是骗子吗?谢谢!

@wim:当然!这是一年半以前。如果您要关闭另一个作为此项目的副本,或者将两个都关闭为较早版本的副本,那可能是有道理的。但是由于一个真实答案在两个方面都是相同的,所以我看不到这个问题是另一个问题的重复。

@DSM我没有打扰检查日期,也许我应该有(?)。我们正在meta上进行讨论。

#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