【问题标题】:How can I create lists from a list of strings? [duplicate]如何从字符串列表创建列表? [复制]
【发布时间】:2012-12-23 20:23:06
【问题描述】:

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

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

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

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

如何在 Python 中做到这一点?

【问题讨论】:

  • 你的最终目标是什么?我问是因为你通常可以完成你想要的,而不必以这种方式命名许多变量。
  • @DSM 你能解释一下为什么你投票认为 this 和 this 不是骗子吗?谢谢!
  • @wim:当然!这个是一年半前来的。如果您想关闭另一个作为此副本的副本,或者将两者都作为早期副本的副本,这可能是有道理的。但由于两者的唯一正确答案是相同的,我看不出这个问题与另一个问题的重复。
  • @DSM 我懒得检查日期,也许我应该有(?)。我们正在meta 讨论这个问题。

标签: python


【解决方案1】:

始终使用Jon Clements' answer。


globals() 返回支持全局命名空间的字典,此时您可以像对待任何其他字典一样对待它。 你不应该这样做。它会导致命名空间的污染,可以覆盖现有的变量,并使调试由此产生的问题变得更加困难。

for name in names:
    globals().setdefault(name, [])
apple.append('red')
print(apple)  # prints ['red']

您必须事先知道该列表包含“apple”,以便稍后引用变量“apple”,此时您可以正常定义该变量。所以这在实践中是没有用的。鉴于 Jon 的回答还会生成字典,因此使用 globals 没有任何好处。

【讨论】:

  • 实际上我更喜欢这个解决方案,因为它允许我创建列表而不是建议的字典。所以我想问为什么我应该使用@Jon Clements 方法而不是这个方法?非常感谢你们!
  • @user1962851 -- globals() 几乎是一个包含全局变量的字典。此解决方案可能会导致对全局命名空间和覆盖现有变量的不必要污染。如果您使用 Jon 的解决方案,您可以使用 fruits['apple'] 和类似方法获得相同的列表,因此它没有太大的缺点。
  • 好的,非常感谢您的解释。然后我会将乔恩的答案设置为接受的答案。
【解决方案2】:

你可以通过创建一个dict来做到这一点:

fruits = {k:[] for k in names}

然后通过(例如:)fruits['apple'] 访问每个变量 - 你不想走单独变量的道路!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2011-07-26
    • 2011-04-20
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多