Как использовать цикл для создания группы контейнеров списка в python

#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’ с каким-либо другим значением int locals ? Что, если переменные названы на основе входных данных, и поэтому вы понятия не имеете, какие новые переменные будут созданы и могут перезаписать переменные, которые вам нужны в вашем коде?