Есть ли в любом случае, чтобы сделать это в 1 строке понимания списка?

#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)))