我想要一行代码,它将创建一个空列表,其名称由递增变量确定。
到目前为止,我到过的所有地方都无济于事。他们建议使用一些可以使列表为空列表或使用字典的方法。这不是我想要的,我想要一行(或几行)代码创建一个空列表(这不是字典或列表列表的一部分,它是一个独立的实体)。我希望这些列表是不同的,通过一个变量来区分,该变量每次创建一个新的空列表时都会增加1。
由于我打算在整个递归函数中创建和删除这些列表,因此一开始就不能批量创建这些空列表。我需要制作多个列表,因为我的意图是使此函数下降到新的递归级别,但稍后再返回到上一个列表。这些充当临时工作列表,它们为原始列表的每个项目计算一个值,然后在找到结果后将其复制到最终列表中。
str("list_" + i) = []
如果i = 1,那么我希望这行代码创建一个名为“ list_1”的空列表,我可以在整个脚本中继续进行交互。
相反,我遇到了"SyntaxError: can't assign to function call"
通过一切手段让我知道我是否毫无意义,我会尽力传达我的要求。
答案 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']})