#python #arrays #list #loops
#python #массивы #Список #Циклы
Вопрос:
Возможно ли создать группу списка / массива из другого списка.
Иметь
L = ['a','b','c','d','e',]
хотелось бы
a=[]
b=[]
c=[]
d=[]
e=[]
Комментарии:
1.Что такое
a
? Это строка ("a"
)?2. Какую проблему вы пытаетесь решить с помощью этого?
3. Я не понимаю варианта использования. Если вы еще не знаете, какими будут строки в L, если вы создадите автономные переменные, никак не связанные друг с другом, как остальная часть вашего кода будет ссылаться на них? Возвращаясь к L и выполняя цикл по нему? Если да, то почему наличие контейнеров в dict менее удобно, чем это?
4. Я не уверен, что полностью понимаю ваш вопрос, но мое предложение состоит в том, чтобы настроить dict, как предложил делнан ниже, а затем вы добавляли бы к каждому списку, выбрав: d[‘a’].добавить (что угодно)
5. Каждое значение, сохраненное в dict, как описано Делнаном ниже, будет представлять собой независимый список. Откуда берется L? Если у вас нет выбора в этом вопросе, может быть проще просто создать его как dict вместо списка в первую очередь.
Ответ №1:
Вы могли бы, применив некоторые хитрости, создавать переменные из строк. Однако это почти никогда не бывает хорошей идеей. Просто используйте dict
, что является именно этим без всех головных болей, возникающих из-за путаницы пространства имен вашего кода с коллекцией (возможно, предоставленной пользователем) данных.
d = {}
for name in L:
d[name] = []
(В Python 2.7 и 3.x вы можете записать это как одно выражение благодаря пониманию по словарю: {name: [] for name in L}
.)
Комментарии:
1. нужны контейнеры в форме списка или массива, 2.6v
2. @user428862: Тогда предоставьте полный пример. То, что вы показали в вопросе, — это не список, это набор назначений.
3. @delman. хорошо, его назначения…. У меня есть что-то похожее на L. Я хочу создать контейнеры списка с элементами в L. которые позже будут заполнены данными. Очистить? Я попробовал %s, с циклом это не удалось.
4. Итак, вы хотите динамически создавать и назначать переменные, названные в честь строк в
L
? Ну, это то, что делает мой ответ. Это единственный разумный способ сделать это.5. Не нужно ждать 2.7 / 3.0 для создания словаря в одном выражении: dict((name, []) для имени в L). В общем, это предпочтительнее императивной сборки.
Ответ №2:
Вот один из способов:
>>> vars={}
>>> for x in L:
... vars[x]=list()
...
>>> vars
{'a': [], 'c': [], 'b': [], 'e': [], 'd': []}
>>> locals().update(vars)
>>> a
[]
>>> b
[]
Это обновляет locals
и добавляет новые элементы. Но на вашем месте я бы просто сохранил dict
named vars
. Лучше иметь явные структуры данных вместо того, чтобы возиться с locals
или globals
.
Комментарии:
1. Нужно ли мне использовать dict. Я надеялся иметь «a» отдельную позицию вместо vars[0].
2. @user428862: я думаю, это идея получше. Может избежать путаницы в дальнейшем. Таким образом, переменные, определенные в коде, понятны и отделены от переменных (т. Е.
dict
записей), определенных во время выполнения. Что, если у вас уже есть переменная с именем ‘a’, а затем попробуйте динамически добавить ‘a’ с каким-либо другим значением intlocals
? Что, если переменные названы на основе входных данных, и поэтому вы понятия не имеете, какие новые переменные будут созданы и могут перезаписать переменные, которые вам нужны в вашем коде?