Как сделать цикл в Python, который создает несколько пустых списков? - PullRequest
0 голосов
/ 28 января 2019

Мне нужна строка кода, которая создаст пустой список, имя которого определяется возрастающей переменной.

Везде, где я до сих пор смотрел, было бесполезно.Вместо этого они предлагают что-то, что составляет список пустых списков или использует словарь.Это не то, что я хочу, я хочу строку (или несколько) кода, который просто создает пустой список (который не является частью словаря или списка списков, отдельной сущностью).Я хочу, чтобы эти списки были различны, различаясь переменной, которая увеличивается на 1 каждый раз, когда создается новый пустой список.

Эти пустые списки не могут быть созданы в одном пакете в самом начале, как я намереваюсьсоставьте и удалите эти списки по всей рекурсивной функции.Мне нужно составить несколько списков, так как я намерен, чтобы эта функция опустилась до нового уровня рекурсии, но позже вернулась к предыдущему списку.Они действуют как временные рабочие списки, которые вычисляют значение для каждого элемента исходного списка, а затем копируют результат в окончательный список, как только он будет найден.

str("list_" + i) = []

Если i = 1, то я бы хотелэта строка кода для создания пустого списка с именем «list_1», с которым я могу продолжать взаимодействовать по всему сценарию.

Вместо этого я встречаюсь с "SyntaxError: can't assign to function call"

Любыми средствамидайте мне знать, если я не имею никакого смысла вообще, и я сделаю все возможное, чтобы передать мою просьбу.

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Это плохая практика, но в любом случае:

for i in range(10):       # for global vars
    globals()["list_" + str(i)] = []
print(list_0) # []

Возможно, вы ищете словарь:

items = dict()
for i in range(10):       # for dictionary 
    items[str("list_" + i)] = []
print(items.list_0) # []
0 голосов
/ 28 января 2019

Избегайте globals, используйте defaultdict

Использование collections.defaultdict одновременно эффективно и .Вам не нужно явно добавлять ключи при добавлении в список значений:

from collections import defaultdict
dd = defaultdict(list)
dd['list_0'].append('foo')

print(dd)
# defaultdict(<class 'list'>, {'list_0': ['foo']})

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

from collections import defaultdict
dd = defaultdict(list, **{k: [] for k in [f'list_{i}' for i in range(5)]})

print(dd)
# defaultdict(<class 'list'>, {'list_0': [], 'list_1': [], 'list_2': [],
#                              'list_3': [], 'list_4': []})
0 голосов
/ 28 января 2019

Настоятельно советую воздержаться от этого, но при этом достигается то, что вы хотите в зависимости от вашего варианта использования:

globals()['list_' + str(i)] = []

for i in range(5):
    globals()['list_' + str(i)] = []

list_1
[]

list_2
[]

etc...

В зависимости от вашего варианта использования переключатель globals для locals и наоборот.

Лучшей идеей будет defaultdict

from collections import defaultdict

my_lists = defaultdict(list)

Теперь вам не нужно инициализировать какой-либо список, пока вы его не используете, и каждый ключ имеет значение, уже равное list.Например:

for i in range(5):
    my_lists['list_' + str(i)].append('foo')

my_lists

defaultdict(list,
            {'list_0': ['foo'],
             'list_1': ['foo'],
             'list_2': ['foo'],
             'list_3': ['foo'],
             'list_4': ['foo']})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...