Cập nhật : Làm phẳng bằng cách sử dụng mở rộng nhưng không hiểu và không sử dụng danh sách làm trình lặp (nhanh nhất)
Sau khi kiểm tra câu trả lời tiếp theo cho câu trả lời này cung cấp giải pháp nhanh hơn thông qua khả năng hiểu danh sách với dual for
tôi đã thực hiện một chút chỉnh sửa và bây giờ nó hoạt động tốt hơn, đầu tiên việc thực thi danh sách (...) đã kéo một phần trăm thời gian lớn, sau đó thay đổi danh sách khả năng hiểu cho một vòng lặp đơn giản cũng được cạo thêm một chút.
Giải pháp mới là:
l = []
for row in output: l.extend(row)
Lớn hơn:
Làm phẳng với bản đồ / mở rộng:
l = []
list(map(l.extend, output))
Làm phẳng bằng khả năng hiểu danh sách thay vì bản đồ
l = []
list(l.extend(row) for row in output)
một số thời gian cho phần mở rộng mới và cải tiến nhận được bằng cách xóa danh sách (...) cho [...]:
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)]
đã là một ma trận 3x2 !? hay tôi đã bỏ lỡ điều gì đó?