【问题标题】:Python: elegant and save coding way to create several listPython:创建多个列表的优雅和节省编码方式
【发布时间】:2012-12-10 11:53:43
【问题描述】:

通常为了将结果存储在 python 中的多个列表中,我会在循环之前创建相应的空列表。

A = []
B = []
c = []
D = []
E = []
F = []

for i in range(100):
  # do some stuff

我有一种方法可以在单个代码行(或几行)中创建列表吗?

【问题讨论】:

  • 谢谢 Alexvassel,问题是我的列表是 100

标签: python list optimization coding-style


【解决方案1】:

如果列表在逻辑上相似(我希望如此,因为一百个不同的变量对程序员来说是暴力的),创建一个列表字典:

list_names = ['a', 'b', 'c' ]
d = {name:[] for name in list_names}

这会创建一个字典:

d = {'a': [], 'b': [], 'c': []}

您可以在哪里访问单个列表:

d['a'].append(...)

或一次性处理所有这些:

for v in d.itervalues():
    v.append(...)

相对于单个列表的进一步优势是您可以将整个 dict 传递给一个方法。

【讨论】:

  • 或者干脆defaultdict(list)
  • @thg435 - 不仅仅是……因为如果你用defaultdict 调用d['xxx'],它会返回一个空列表,尽管你从未明确定义过它。
【解决方案2】:

你可以使用一个对象:

>>> from string import ascii_uppercase
>>> class MyLists(object):
    def __init__(self):
        for char in ascii_uppercase:
            setattr(self, char, [])


>>> l = MyLists()
>>> l.A
[]
>>> l.B
[]

【讨论】:

    【解决方案3】:
    a, b, c, d, e, f = [], [], [], [], [], []
    

    【讨论】:

      【解决方案4】:
      lists = ([] for _ in range(6))
      lists[5].append(...)
      

      或

      A, B, C, D, E, F = ([] for _ in range(6))
      

      或使用默认字典

      d = defaultdict(list)
      d['F'].append(...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2011-06-07
        相关资源
        最近更新 更多