Python中的动态变量

Mah*_*hdi 0 python variables list

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

for i in range(len(myself)):
   list(i) = []
Run Code Online (Sandbox Code Playgroud)

我应该使用什么而不是列表(i)?这意味着我想要一些名字如下:

list1
list2
list3
...
Run Code Online (Sandbox Code Playgroud)

wer*_*ika 7

我建议你只使用列表或字典而不是动态变量名.所有版本以下结果lists[0],lists[1]等等之中[],这似乎足够接近你想要什么,而且会更可读/维护在长期.(注意:我使用的lists不是list变量名,因为后者会覆盖list你可能不想要的内置函数).

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

lists = [[] for i in range(len(myself))]
Run Code Online (Sandbox Code Playgroud)

2)相同但使用for循环而不是列表理解:

lists = []
for i in range(len(myself)):
   lists.append([])
Run Code Online (Sandbox Code Playgroud)

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

lists = {}
for i in range(len(myself)):
   lists[i] = []
Run Code Online (Sandbox Code Playgroud)

关于动态变量名称,即变量list1而不是lists[1]......严重的是,你可能不应该这样做.这是不必要的复杂和难以维护.想一想 - 下个月你会想要修改脚本,你会试着弄清楚变量的list1定义,你将无法用纯文本搜索来做到这一点.这是一种痛苦.
但是,如果你真的想出于某些原因,那么可能会exec- 这里有一些理由不使用它 - 或者修改locals()- 根据文档的坏主意.另外请参阅评论,以了解更多讨论为什么这些事情是一个坏主意以及甚至谈论它们会让人感到困惑.


Hug*_*ell 5

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

myLists = {"list{}".format(i):[] for i in range(len_i)}
Run Code Online (Sandbox Code Playgroud)

不要list用作变量名 - 它隐藏了现有的关键字.