Как я смутно понимаю, itertools.chain.from_iterable предназначен для объединения двух или более вещей, возвращающих итерации, т. Е. Вещи, которые используют ключевое слово yield, и при их использовании как таковые они эффективны с точки зрения памяти.Содержит ли цепочка список какие-либо выгоды?
У меня есть этот код, который я пытаюсь расшифровать. Кто-то написал это.
all_rows = []
with open(__file__, 'rt') as reader:
for row in reader:
all_rows.append(row)
magic = list(itertools.chain.from_iterable(all_rows))
for line in magic:
print(line)
Не было бы лучше просто использовать all_rows напрямую, поскольку это уже структура данных в памяти?
Стреляйте, мой пример должен иметь ошибку. Во всяком случае, фактический код читается в файлах в список строк, а затем вызывает список (itertools.chain.from_iterable (all_rows)) перед итерацией по строкам в цикле for-in. – MatthewMartin
@MatthewMartin: это звучит расточительно, зачем строить список при повторении в цикле? Если вам не нужен произвольный доступ, тогда не вызывайте 'list()' на этом и просто итетерируйте. –
@MatthewMartin: также, если фактический код читается в файлах в список строк, подумайте об использовании генератора, который создает это содержимое вместо того, чтобы не хранить все в памяти. –