【问题标题】:Dynamic variable in Python [duplicate]Python中的动态变量[重复]
【发布时间】:2012-06-09 19:09:36
【问题描述】:

如何在 python 中创建具有动态名称的列表,例如

for i in range(len(myself)):
   list(i) = []

我应该用什么来代替 list(i) ? 这意味着我想要一些如下名称:

list1
list2
list3
...

【问题讨论】:

  • 不确定我是否理解您的目标。您能否重新表述您的问题或详细说明您要完成的工作?
  • 是的,您所说的“动态名称列表”到底是什么意思?
  • [c for c in 'dynamic names']...抱歉...没办法
  • 我在这里不止一次看到过这个问题,它通常以有更好的方法来解决你的问题而告终......就像一个字典

标签: python list variables


【解决方案1】:

我建议您只使用列表或字典而不是动态变量名。以下所有版本导致lists[0]lists[1] 等为[],这似乎与您想要的非常接近,并且从长远来看将更具可读性/可维护性。 (注意:我使用lists 而不是list 作为变量名,因为后者会覆盖您可能不想要的内置list 函数)。

1) lists 是列表列表的版本(数字只是列表的顺序):

lists = [[] for i in range(len(myself))]

2) 相同,但使用 for 循环而不是列表推导:

lists = []
for i in range(len(myself)):
   lists.append([])

3) 带有lists 的版本是一个以数字为键的列表字典(如果您想稍后删除一些值,则更灵活一些):

lists = {}
for i in range(len(myself)):
   lists[i] = []

关于动态变量名称,即像 list1 这样的变量而不是 lists[1]... 说真的,您可能不应该这样做。它不必要地复杂且难以维护。想一想 - 下个月您将要修改脚本,并且您将尝试找出变量 list1 的定义位置,而您将无法通过纯文本搜索来做到这一点。这是一种痛苦。
但是,如果您出于某种原因真的想这样做,可以使用exec - here are some reasons not to use it - 或修改locals() - bad idea according to documentation。另请参阅 cmets 以了解更多关于为什么这些事情是一个坏主意以及谈论它们会让人感到困惑的更多讨论。

【讨论】:

  • 如果您有兴趣,可以这样做 :-) "list{} = []".format(i) [我只是从旧式自己过渡到 .format]
  • 我会认真考虑使用 exec 删除有关动态变量的部分。这是一个糟糕的想法,甚至不应该作为一个选项提供。
  • @jdi - 这是一个糟糕的选择,但成年人和所有人都同意......我目前正在寻找反对使用它的好论据,如果有帮助,我会添加链接。
  • 是的,您应该确保强调为什么这是一种糟糕的做法。这有点像说“你不应该谋杀某人,但如果你好奇,你可以使用这些概述的方法很容易地杀死某人”;)
  • 顺便说一句,称为lists[0] 的对象已经有了一个名称:它本身就是'lists[0]'。在某种程度上,它实际上是一个动态变量名。
【解决方案2】:

动态变量名很少是个好主意;使用字典几乎总是更好:

myLists = {"list{}".format(i):[] for i in range(len_i)}

不要使用list 作为变量名——它会隐藏现有的关键字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2023-04-07
    • 2016-07-01
    • 2014-05-19
    • 2021-10-30
    • 2012-04-13
    相关资源
    最近更新 更多