Вопрос по list, variables, python – Динамическая переменная в Python [дубликат]

0

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
...
Да, что именно вы подразумеваете под "списками с динамическими именами"? Joel Cornett
Я видел этот вопрос не раз здесь, и обычно он заканчивается тем, что есть лучший способ решить вашу проблему ... Как диктат jdi
[c для c в «динамических именах»] ... извините ... ничего не поделаешь Gerrat
Не уверен, что понимаю вашу цель. Можете ли вы перефразировать ваш вопрос или уточнить, что вы пытаетесь достичь? Levon

Ваш Ответ

2   ответа
5

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

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

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

7

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() - плохая идея согласно документации, Также см. Комментарии для дальнейшего обсуждения того, почему эти вещи являются плохой идеей и насколько запутанным становится даже говорить о них.

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

Похожие вопросы