【问题标题】:Make a list with a name that is only known after the program runs制作一个只有在程序运行后才知道的名称的列表
【发布时间】:2013-04-12 02:55:47
【问题描述】:

我想列一个列表,并给它起一个我只有在运行程序后才知道的名字:

例如:

#making shelfs
group_number = 1
group_name = 'group' + str(group_number)
print group_name

group_name 将是:group1

现在我想创建一个名为 group1 的空列表。这种事情怎么办?

【问题讨论】:

  • 为什么要这样做?一般建议是:不要这样做。
  • 为什么要做这样的事情?
  • 您能否详细说明您正在尝试做的事情(大图)?可以按您的要求做,但我发现这不太可能是您真正想要的。
  • 我绝对无法避免这种情况。这些架子组将根据程序运行前未知的玩家“行进”的距离来构建

标签: python list python-2.7


【解决方案1】:

您想要创建以“组”开头的变量的伪命名空间。为什么不使用字典呢?

#making shelfs
groups = {}
group_number = 1
name = str(group_number)
groups[name] = [] # or whatever
print groups[name]

这与@mgilson 的回答略有不同,因为我试图鼓励您为每个相关对象集合创建新的命名空间。

【讨论】:

    【解决方案2】:

    你这样做:

    locals()['my_variable_name'] = _whatever_you_wish_
    

    或

    globals()['my_variable_name'] = _whatever_you_wish_
    

    或

    vars()['my_variable_name'] = _whatever_you_wish_
    

    谷歌自己找出差异:P

    【讨论】:

    • 修改局部变量只适用于locals返回globals的全局命名空间
    【解决方案3】:

    通常你只是把它放入字典中:

    d = {group_name:[]}
    

    现在您可以通过字典访问您的列表。例如:

    d['group1'].append('Hello World!')
    

    另一种方法是修改globals() 函数(它是一个字典)的结果。这绝对是一种不好的做法,应该避免,但我将其包含在此处,因为了解更多有关您正在使用的工具的信息总是很高兴:

    globals()[group_name] = []
    group1.append("Hello World!")
    

    【讨论】:

    • +1。一般来说,当人们想要这样做时,他们实际上会更好地使用字典。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2022-06-24
    • 2021-10-06
    • 2019-08-13
    • 2019-07-02
    • 2011-08-18
    相关资源
    最近更新 更多