2012-06-09 6 views
0

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

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

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

list1 
list2 
list3 
... 
+0

Не уверен, что я понимаю вашу цель. Не могли бы вы перефразировать свой вопрос или уточнить, что вы пытаетесь выполнить? – Levon

+0

Да что именно вы подразумеваете под «списками с динамическими именами»? –

+1

[c для c в «динамических именах»] ... извините ... не смог помочь – Gerrat

ответ

5

Динамические имена переменных очень редко хорошая идея; это почти всегда лучше использовать словарь:

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

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

7

Я бы посоветовал использовать список или словарь вместо имен динамических переменных. Все версии ниже приводят к lists[0], lists[1] и т. Д. [], который кажется достаточно близким к тому, что вы хотите, и будет более читабельным/поддерживаемым в долгосрочной перспективе. (Примечание: я использую lists вместо list в качестве имени переменной, потому что последний перезаписывает встроенную функцию list, которую вы, вероятно, не хотите).

1) Версия с lists является список списков (цифры только порядок списков):

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

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

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

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

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

О динамических имен переменных, то есть переменные, такие как list1 вместо lists[1] ... Серьезно, вы, вероятно, не следует делать это. Это излишне сложно и сложно поддерживать. Подумайте об этом - в следующем месяце вы захотите изменить сценарий, и вы попытаетесь выяснить, где была определена переменная list1, и вы не сможете сделать это с помощью обычного текстового поиска. Это боль.
Но если вы действительно хотите по какой-то причине, это возможно с exec - here are some reasons not to use it - или с изменением locals() - bad idea according to documentation. Также см. Комментарии для более подробного обсуждения того, почему эти вещи - плохая идея, и как запутывает это, даже говорит о них.

+0

Это будет сделано, если вам интересно :-) '" list {} = [] ". Format (i)' [Я просто перехожу к '.format' из самого старого стиля] – Levon

+1

I серьезно подумал бы об удалении этой части о динамической переменной с exec. Его ужасная идея и не должна быть доступна в качестве опции. – jdi

+1

@jdi - это плохой вариант, но люди, которые согласны, и все ... Я сейчас ищу SO для хороших аргументов против его использования и добавлю ссылки, если это поможет. – weronika

Смежные вопросы