Динамическая переменная в Python [дубликат]

This question already has an answer here:

How do I create a variable number of variables? 16 answers

Как я могу создать списки с динамическими именами в Python, например

for i in range(len(myself)):
   list(i) = []

что я должен использовать вместо списка (я)? это означает, что я хочу некоторые имена, как показано ниже:

list1
list2
list3
...
 jdi09 июн. 2012 г., 21:22
Я видел этот вопрос не раз здесь, и обычно он заканчивается тем, что есть лучший способ решить вашу проблему ... Как диктат
 Levon09 июн. 2012 г., 21:10
Не уверен, что понимаю вашу цель. Можете ли вы перефразировать ваш вопрос или уточнить, что вы пытаетесь достичь?
 Gerrat09 июн. 2012 г., 21:12
[c для c в «динамических именах»] ... извините ... ничего не поделаешь
 Joel Cornett09 июн. 2012 г., 21:11
Да, что именно вы подразумеваете под "списками с динамическими именами"?

Ответы на вопрос(2)

почти всегда лучше использовать словарь:

myLists = {"list{}".format(i):[] for i in range(len_i)}

Не использоватьlist как имя переменной - скрывает существующее ключевое слово.

just use a list or dictionary instead of dynamic variable names, Все версии ниже приводят кlists[0], lists[1] и т. д.[], который кажется достаточно близким к тому, что вы хотите, и будет более читабельным / ремонтопригодным в долгосрочной перспективе. (Примечание: я используюlists вместоlist в качестве имени переменной, потому что последний перезапишет встроенныйlist функция, которую вы, вероятно, не хотите).

1) Версия сlists являющийся списком списков (номера - только порядок списков):

lists = [[] for i in range(len(myself))]

2) То же самое, но с циклом for вместо понимания списка:

lists = []
for i in range(len(myself)):
   lists.append([])

3) Версия сlists быть словарём списков с числами в качестве ключей (немного более гибким, если вы хотите удалить некоторые значения позже или около того):

lists = {}
for i in range(len(myself)):
   lists[i] = []

About dynamic variable namesпеременные типаlist1 вместоlists[1]... Шутки в сторону,you probably shouldn't do that, Это излишне сложно и сложно поддерживать. Подумайте об этом - в следующем месяце вы захотите изменить скрипт, и вы попытаетесь выяснить, где переменнаяlist1 был определен, и вы не сможете сделать это с помощью простого текстового поиска. Это боль.
Но если вы действительно хотите по какой-то причине, это возможно сexec - Вот несколько причин, чтобы не использовать его - или с модификациейlocals() - плохая идея согласно документации, Также см. Комментарии для дальнейшего обсуждения того, почему эти вещи являются плохой идеей и насколько запутанным становится даже говорить о них.

 09 июн. 2012 г., 21:30
Да, вы должны убедиться, что это ужасная практика. Это все равно, что сказать: «Вы не должны убивать кого-то, но на случай, если вам интересно, вы можете довольно легко убить кого-то, используя описанные методы». ;)
 09 июн. 2012 г., 21:25
Я бы серьезно подумал об удалении этой части динамической переменной с помощью exec. Это ужасная идея и даже не должна быть доступна в качестве опции.
 09 июн. 2012 г., 21:27
@jdi - это плохой вариант, но взрослые по обоюдному согласию и все такое ... В настоящее время я ищу SO, чтобы найти веские аргументы против его использования, и добавлю ссылки, если это поможет.
 09 июн. 2012 г., 21:25
Это подойдет, если вам интересно :-)"list{} = []".format(i) [Я только перехожу на.format сам по старому стилю]
 09 июн. 2012 г., 22:44
Кстати, объект упоминается какlists[0] уже есть имя: это'lists[0]' сам. В каком-то смысле это буквально имя динамической переменной.

Ваш ответ на вопрос