업데이트 : 확장을 사용하지만 이해하지 않고 목록을 반복자로 사용하지 않고 병합 (가장 빠름)
목록 이해를 통해 더 빠른 솔루션을 제공 한 이것에 대한 다음 답변을 확인한 후 dual for약간의 조정을 수행했으며 이제 더 잘 수행됩니다. 먼저 list (...) 실행은 많은 시간을 끌고 목록을 변경했습니다. 간단한 루프에 대한 이해도 조금 더 깎였습니다.
새로운 솔루션은 다음과 같습니다.
l = []
for row in output: l.extend(row)
이전 :
지도 / 확장으로 병합 :
l = []
list(map(l.extend, output))
지도 대신 목록 이해력으로 병합
l = []
list(l.extend(row) for row in output)
새로운 확장에 대한 일부 timeits 및 [...]에 대한 list (...)를 제거하여 개선되었습니다.
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 행렬입니다!? 아니면 내가 뭔가를 놓친거야?