Tôi đoán nó là tốt hơn để so sánh chúng bằng thời gian thực hiện ...
a = ['A:1','B:2','C:3','D:4']
def case1():
dc = {}
for i in a:
q, w = i.split(':')
dc[q]=w
def case2():
dict(x.split(":") for x in a)
def case3():
{x.split(":")[0] : x.split(":")[1] for x in a}
%timeit -n 100000 case1()
>> 100000 loops, best of 3: 1.95 us per loop
%timeit -n 100000 case2()
>> 100000 loops, best of 3: 3.05 us per loop
%timeit -n 100000 case3()
>> 100000 loops, best of 3: 3.39 us per loop
Tested cho 100.000
vòng và 3 kiểm tra cho mỗi vòng lặp. Như bạn có thể thấy, thời gian thực hiện nhanh nhất thuộc về case1()
: tiêu chuẩn for loop
.
Kết quả: 1 phương pháp lót không có nghĩa là chúng nhanh hơn, trên thực tế, vòng lặp cơ bản for
thường là cách nhanh nhất để đi.
Cập nhật: kết quả cho danh sách 13312 mục, danh sách cơ bản có 26 mục, còn lại là bản sao của các mục đó trong danh sách. Thời gian được tính trên 1000 vòng và tốt nhất của 3 cho mỗi vòng lặp
%timeit -n 1000 case3()
1000 loops, best of 3: 9.49 ms per loop
%timeit -n 1000 case2()
1000 loops, best of 3: 5.79 ms per loop
%timeit -n 1000 case1()
1000 loops, best of 3: 5.55 ms per loop
Cập nhật 2: thử nghiệm cuối cùng diễn ra với một danh sách tổng 27262976
mục, danh sách cơ bản có 26 mặt hàng, còn lại là các bản sao của những mặt hàng wtihin danh sách. Thời gian được tính toán trên 10 vòng lặp và tốt nhất là 3 cho mỗi vòng lặp (vì việc thực hiện danh sách rất dài mất nhiều thời gian).
%timeit -n 10 case1()
10 loops, best of 3: 11.4 s per loop
%timeit -n 10 case2()
10 loops, best of 3: 12.1 s per loop
%timeit -n 10 case3()
10 loops, best of 3: 20.2 s per loop
Tôi tin rằng không có gì hiệu quả hơn thế. Hãy nhớ rằng "ít dòng" hơn không giống với "nhanh hơn". Tất cả đều tóm tắt cách ngôn ngữ mở rộng các dòng đó. – LtWorf
Câu trả lời so sánh của tôi được cập nhật, so sánh các câu trả lời có liên quan cho các danh sách ngắn (4 mục), dài (13312 mục) và danh sách dài (27262976 mục). – FallenAngel