Tôi nghĩ rằng tôi sẽ củng cố các câu trả lời và hiển thị một số timeit
kết quả.
Python 2 hút khá tệ về điều này, nhưng map
nhanh hơn một chút so với hiểu.
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import timeit
>>> setup = """import random
random.seed(10)
l = [str(random.randint(0, 99)) for i in range(100)]"""
>>> timeit.timeit('[int(v) for v in l]', setup)
116.25092001434314
>>> timeit.timeit('map(int, l)', setup)
106.66044823117454
Python 3 nhanh hơn gấp 4 lần, nhưng chuyển đổi map
đối tượng trình tạo thành danh sách vẫn nhanh hơn mức hiểu và tạo danh sách bằng cách giải nén trình map
tạo (cảm ơn Artem!) Vẫn nhanh hơn một chút.
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import timeit
>>> setup = """import random
random.seed(10)
l = [str(random.randint(0, 99)) for i in range(100)]"""
>>> timeit.timeit('[int(v) for v in l]', setup)
25.133059591551955
>>> timeit.timeit('list(map(int, l))', setup)
19.705547827217515
>>> timeit.timeit('[*map(int, l)]', setup)
19.45838406513076
Lưu ý: Trong Python 3, 4 phần tử dường như là điểm giao nhau (3 trong Python 2) trong đó khả năng hiểu nhanh hơn một chút, mặc dù việc giải nén trình tạo vẫn nhanh hơn so với các danh sách có nhiều hơn 1 phần tử.