#python
Вопрос:
Возврат на карте — это генератор списков. Я хочу превратить его в единый список. Это работает, но я хочу знать, могу ли я сделать это в одной строке кода в понимании списка.
with futures.ThreadPoolExecutor(max_workers=20) as executor:
dirs = []
for workers in executor.map(partial_subdirs, prefix_list):
for w in workers:
dirs.append(w)
Я уже пробовал, это не добавляет списки в 1 список, а вместо этого создает список списков:
with futures.ThreadPoolExecutor(max_workers=20) as executor:
dirs = [(f f) for f in executor.map(partial_subdirs, prefix_list)]
Комментарии:
1. В первом примере есть две петли, но только одна петля во втором.
2.
[w for workers in executor.map(partial_subdirs, prefix_list) for w in workers]
3. Спасибо! Я не мог об этом подумать!
Ответ №1:
Вы можете использовать list.extend
, чтобы избавиться от внутреннего цикла:
dirs = []
for workers in executor.map(partial_subdirs, prefix_list):
dirs.extend(workers)
Или для однострочного (и, вероятно, наиболее эффективного) использования itertools.chain.from_iterable
:
from itertools import chain
dirs = list(chain.from_iterable(executor.map(partial_subdirs, prefix_list)))