【问题标题】:List of named lists命名列表列表
【发布时间】:2013-08-21 16:01:37
【问题描述】:

我需要在 python 脚本中创建一个命名列表的列表。

我想要做的是创建一个 mklist 方法,它将获取列表中的字符串并创建为每个字符串命名的列表。所以,从这里开始:

a = "area"

for i in range(1, 37):
    x = str(a) + str("%02d" % (i,))
    ' '.join(x.split())

我想得到以下内容:

area01 = []
area02 = []
area03 = []
area04 = []
area05 = []
area06 = []
area07 = []
area08 = []
area09 = []
area10 = []
area11 = []
area12 = []
area13 = []
area14 = []
area15 = []
area16 = []
area17 = []
area18 = []
area19 = []
area20 = []
area21 = []
area22 = []
area23 = []
area24 = []
area25 = []
area26 = []
area27 = []
area28 = []
area29 = []
area30 = []
area31 = []
area32 = []
area33 = []
area34 = []
area35 = []
area36 = []   

有什么建议吗?我似乎无法得到它。谢谢! E

【问题讨论】:

  • “命名列表”是什么意思?你说的是字典吗?你不能“得到”它的哪一部分?此外,虽然多余,但您的代码看起来应该可以生成名称。
  • 您是使用 Python 代码生成 Python 代码,还是尝试在脚本文件中创建这些列表?在后一种情况下,您可能不应该这样做。
  • 一个非常相似的问题stackoverflow.com/questions/4010840/…
  • 如果您尝试动态创建变量,答案是:Don't

标签: python list


【解决方案1】:

这需要一个列表列表:

area = [[] for i in range(37)]

或列表的字典:

area = {i: [] for i in range(1, 37)}        # Python 2.7+
area = dict((i, []) for i in range(1, 37))  # Python 2.6 or earlier

然后您可以通过以下方式访问每个项目:

area[1]
area[2]
...
area[36]

【讨论】:

    【解决方案2】:

    请参阅this 问题。

    a = "area"
    for i in range(1, 37):
       x = str(a) + str("%02d" % (i,))
       locals()[x] = []
    

    如果您希望列表是全局的,请使用 globals()。

    这将为您提供空列表变量 area01 到 area36。

    您应该注意,尽管可以做到,并不意味着就应该这样做。更好/更具可读性的解决方案是:

    area = [[] for i in range(37)]
    

    (参见约翰的解决方案)

    【讨论】:

      【解决方案3】:

      类似:

      a = "area"
      x = [ "%s%02d = []" % (a, i) for i in range(1,37) ]
      print('\n'.join(x))
      

      如果你想在当前 Python 会话中定义你的列表,你可以将最后一行替换为

      for i in range(0, 36):
          exec(x[i])
      

      并检查

      print area01
      print area35
      

      但是请注意this is not advisable

      【讨论】:

      • 考虑到我回答了字面上的问题,我看不出我怎么可能应该投反对票
      猜你喜欢
      • 2015-11-10
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多