如何在Python中进行循环以创建多个空列表?

时间:2019-01-27 23:18:48

标签: python list loops dictionary

我想要一行代码,它将创建一个空列表,其名称由递增变量确定。

到目前为止,我到过的所有地方都无济于事。他们建议使用一些可以使列表为空列表或使用字典的方法。这不是我想要的,我想要一行(或几行)代码创建一个空列表(这不是字典或列表列表的一部分,它是一个独立的实体)。我希望这些列表是不同的,通过一个变量来区分,该变量每次创建一个新的空列表时都会增加1。

由于我打算在整个递归函数中创建和删除这些列表,因此一开始就不能批量创建这些空列表。我需要制作多个列表,因为我的意图是使此函数下降到新的递归级别,但稍后再返回到上一个列表。这些充当临时工作列表,它们为原始列表的每个项目计算一个值,然后在找到结果后将其复制到最终列表中。

str("list_" + i) = []

如果i = 1,那么我希望这行代码创建一个名为“ list_1”的空列表,我可以在整个脚本中继续进行交互。

相反,我遇到了"SyntaxError: can't assign to function call"

通过一切手段让我知道我是否毫无意义,我会尽力传达我的要求。

3 个答案:

答案 0 :(得分:1)

强烈建议您这样做,但这会根据您的用例实现您想要的:

globals()['list_' + str(i)] = []

for i in range(5):
    globals()['list_' + str(i)] = []

list_1
[]

list_2
[]

etc...

取决于globals的用例开关locals,反之亦然。

一个更好的主意是defaultdict

from collections import defaultdict

my_lists = defaultdict(list)

现在,您不必初始化任何列表,除非您使用它,并且每个键附带的值已经是一个list。例如:

for i in range(5):
    my_lists['list_' + str(i)].append('foo')

my_lists

defaultdict(list,
            {'list_0': ['foo'],
             'list_1': ['foo'],
             'list_2': ['foo'],
             'list_3': ['foo'],
             'list_4': ['foo']})

答案 1 :(得分:0)

这是不好的做法,但无论如何:

for i in range(10):       # for global vars
    globals()["list_" + str(i)] = []
print(list_0) # []

也许您正在寻找的是字典:

items = dict()
for i in range(10):       # for dictionary 
    items[str("list_" + i)] = []
print(items.list_0) # []

答案 2 :(得分:0)

避免使用position2,请使用globals

使用collections.defaultdict既有效,又易于管理。追加到列表值时无需显式添加键:

defaultdict

如果您想明确地添加键,即使列表值为空,也可以通过添加一个额外的参数来实现:

from collections import defaultdict
dd = defaultdict(list)
dd['list_0'].append('foo')

print(dd)
# defaultdict(<class 'list'>, {'list_0': ['foo']})