Оновлення : Згладжування за допомогою розширення, але без розуміння та без використання списку як ітератора (найшвидший)
Перевіривши наступну відповідь на це, що забезпечило швидше рішення за допомогою розуміння списку, dual for
я трохи підправив, і тепер він працює ефективніше, спочатку виконання списку (...) тягнуло великий відсоток часу, потім змінювало список розуміння для простої петлі, поголеної також трохи більше.
Новим рішенням є:
l = []
for row in output: l.extend(row)
Старіші:
Зрівняння з картою / розширенням:
l = []
list(map(l.extend, output))
Вирівнювання з розумінням списку замість карти
l = []
list(l.extend(row) for row in output)
трохи часу для нового розширення та вдосконалення, отриманого шляхом простого видалення списку (...) для [...]:
import timeit
t = timeit.timeit
o = "output=list(zip(range(1000000000), range(10000000))); l=[]"
steps_ext = "for row in output: l.extend(row)"
steps_ext_old = "list(l.extend(row) for row in output)"
steps_ext_remove_list = "[l.extend(row) for row in output]"
steps_com = "[item for sublist in output for item in sublist]"
print("new extend: ", t(steps_ext, setup=o, number=10))
print("old extend w []: ", t(steps_ext_remove_list, setup=o, number=10))
print("comprehension: ", t(steps_com, setup=o, number=10,))
print("old extend: ", t(steps_ext_old, setup=o, number=10))
>>> new extend: 4.502427191007882
>>> old extend w []: 5.281140706967562
>>> comprehension: 5.54302118299529
>>> old extend: 6.840151469223201
[(12.2817, 12.2817), (0, 0), (8.52, 8.52)]
це вже матриця 3x2!? чи я щось пропустив?