Frst, nếu bạn quan tâm về hiệu suất trong Python (mà không phải lúc nào cũng là một điều hợp lý để quan tâm, nhưng đó là chuyện khác), bạn nên sử dụng các timeit module. Ngay cả trong C thật khó để dự đoán một số chức năng sẽ hoạt động như thế nào sau khi biên dịch, và khó hơn trong Python. Mọi người thường tự tin thể hiện ý kiến về những chức năng nào nhanh hơn phụ thuộc vào dữ liệu. Sau đó - bằng cách sử dụng timeit, ý tôi là - bạn có thể tự mình phát hiện ra.
Thứ hai, nếu bạn thực sự quan tâm đến hiệu suất trên danh sách phao, bạn không nên sử dụng danh sách nào cả, nhưng mảng có nhiều mảng. Sử dụng IPython tại đây, theo Python 2.7.2, giúp việc định thời dễ dàng:
In [41]: import random, numpy
In [42]: a = [0.1*i for i in range(10**5)]
In [43]: timeit min(a)
100 loops, best of 3: 4.55 ms per loop
In [44]: timeit sorted(a)[0]
100 loops, best of 3: 4.57 ms per loop
In [45]: random.shuffle(a)
In [46]: timeit min(a)
100 loops, best of 3: 6.06 ms per loop
In [47]: timeit min(a) # to make sure it wasn't a fluke
100 loops, best of 3: 6.07 ms per loop
In [48]: timeit sorted(a)[0]
10 loops, best of 3: 65.9 ms per loop
In [49]: b = numpy.array(a)
In [50]: timeit b.min()
10000 loops, best of 3: 97.5 us per loop
Và chúng tôi lưu ý một vài điều. (1) Sắp xếp của Python (timsort) hoạt động rất tốt trên dữ liệu đã sắp xếp chạy, do đó việc sắp xếp danh sách đã sắp xếp gần như không bị phạt. (2) Việc sắp xếp một danh sách ngẫu nhiên, mặt khác, chậm hơn rất nhiều, và điều này sẽ chỉ trở nên tệ hơn khi dữ liệu lớn hơn. (3) Numpy.min() trên một mảng float hoạt động nhanh hơn sáu mươi lần so với min trong danh sách Python, vì nó không phải là chung.
Tôi sẽ có một đâm rằng 'min' sẽ không chỉ có ngữ nghĩa chính xác hơn, nhưng có khả năng sẽ được triển khai hiệu quả hơn vì Python sẽ biết phải làm gì, và' sort() 'có thể không phải là điều tốt nhất làm. –
Ngoài ra, hãy xem http://stackoverflow.com/questions/2289053/fast-way-to-get-n-min-or-max-elements-from-a-list-in-python cho một bản sao –
Đã được 'thời gian 'bị hỏng? Điều này có vẻ như một cơ hội tuyệt vời để hiển thị kết quả từ 'timeit'. Tại sao bạn không đăng kết quả 'timeit'? –