Một giải pháp khả thi khác là sử dụng numpy
sẽ rất hiệu quả, đối với các danh sách lớn thậm chí có thể hiệu quả hơn so với việc hiểu danh sách hoặc cho vòng lặp.
import numpy as np
a = np.arange[5.0] # a --> array[[0., 1., 2., 3., 4.]]
# numpy operates on arrays element by element
#
b =3.*a # b --> array[[0., 3., 6., 9., 12.]]
Đây là một hoạt động khá đơn giản nhưng bạn có thể trở nên phức tạp hơn bằng cách sử dụng một mảng chỉ đơn giản là một đối số trong một công thức. Đối với các mảng lớn, điều này có thể nhanh hơn nhiều so với khả năng hiểu danh sách và nó làm cho mã sạch hơn và dễ đọc hơn [không cần tạo chức năng để ánh xạ trong một danh sách hiểu]. Bạn cũng có thể sử dụng lập chỉ mục và cắt để điều chỉnh những gì bạn muốn làm:
Nếu bạn muốn có quyền truy cập vào các vị trí chỉ mục thực tế
# b is as above
for i, x in np.ndenumerate[b]:
print i, x
Đầu ra của vòng lặp này là:
[0,] 0.0
[1,] 3.0
[2,] 6.0
[3,] 9.0
[4,] 12.0
Lưu ý: Chỉ số được trả về dưới dạng Tuple của Numpy để xử lý các kích thước bổ sung. Ở đây chúng tôi chỉ có một chiều duy nhất để bạn phải giải nén tuple để lấy chỉ mục của phần tử.
Đó là cách nhanh nhất để lặp lại danh sách trong Python? Đây là câu trả lời
Giới thiệu
Trong Python, có những phương pháp khác nhau để lặp lại một danh sách. Mục tiêu của bài viết này là để minh họa các phương pháp này và, chủ yếu, cho thấy cái nào là nhanh nhất.
Việc đánh giá từng phương pháp sẽ được thực hiện trên ba khía cạnh:
- Nó có phương thức có thể truy xuất giá trị chỉ mục?
- Nó có phương thức có thể lấy lại giá trị vật phẩm?
- Tốc độ của phương pháp
Danh sách được sử dụng để kiểm tra đã được tạo theo cách sau và có 10000 thanh ghi.
Mỗi phương pháp đã được định thời với chức năng này.
Ở đây bạn cũng có thể tìm thấy đặc điểm kỹ thuật của máy tính xách tay và phần mềm tôi đã sử dụng để thực hiện các thử nghiệm này.
For-loop
Phương pháp đầu tiên được thử nghiệm là vòng lặp bình thường, phương pháp đầu tiên được học bởi hầu hết mọi người đang tiếp cận thế giới Python.
Phương pháp này chỉ cho phép truy xuất mục, nhưng không chỉ mục. Ở phía tốc độ, nó đạt được 0,237 ms.
Phạm vi cho vòng lặp
Phương pháp thứ hai là với việc sử dụng phương pháp phạm vi.
Phương pháp này cho phép truy xuất các chỉ mục, nhưng không phải các mục trong danh sách. Ở phía tốc độ, nó đạt được 0,554 ms.
Liệt kê cho vòng lặp
Phương pháp thứ ba là với việc sử dụng phương pháp liệt kê, trong cộng đồng Python theo cách này được coi là thực sự pythonic và cho phép lấy cả hai chỉ mục và thời gian cùng một lúc.
Phương pháp này đã cần 0,862 ms để xử lý danh sách.
Trong khi lặp lại
Một phương pháp khác được thử nghiệm là vòng lặp trong khi, nhưng nó không đạt được kết quả tốt và nó không thích nghi với việc lặp lại trong danh sách, như bạn sẽ tưởng tượng.
Nó chỉ có thể lấy chỉ số và đạt được thời gian 2,747 ms.
Phạm vi vòng lặp với quyền truy cập vào mục
Phương pháp này rất giống với vòng lặp phạm vi, do đó, dòng tương tự, thay đổi duy nhất là chúng tôi thực hiện quyền truy cập vào đối tượng bên trong vòng lặp. Điều này cho phép có thể truy xuất không chỉ chỉ mục, mà còn cả mục.
Điều này gây ra rắc rối trong thời gian tốc độ, điều trị 1.368 ms mà nó đạt được trong trường hợp này, hơn 2 lần so với phiên bản khác chỉ lấy chỉ số.
Zip for-loop
Phương pháp này là hỗn hợp của phương pháp thứ nhất và thứ hai được minh họa ở trên, nó sử dụng hàm zip để kết hợp chỉ mục với các mục. Điều này cho phép để có được cả các chỉ mục và các mục.
Thời gian đạt được là 0,901 ms.
Bản đồ cho vòng lặp
Kỹ thuật này đã được xây dựng với việc sử dụng chức năng MAP, cho phép ánh xạ một trình lặp và xử lý nó với việc sử dụng hàm.
Kỹ thuật này đạt được 1,518 ms.
Tóm tắt lại
Ở đây bạn có thể tìm thấy một bản tóm tắt cho các phương pháp khác nhau đã được thử với biểu đồ thanh hiển thị tốc độ khác nhau giữa phương thức.
Method Index Item Speed
--------------------- ------- ------ ----------
for-loop no yes 0.237 ms
Range for-loop yes no 0.554 ms
Enumerate for-loop yes yes 0.862 ms
while-loop yes no 2.747 ms
Range for-loop item yes yes 1.368 ms
Zip for-loop yes yes 0.901 ms
map loop no yes 1.518 ms
Một mẫu mà nó đáng chú ý, hầu hết các phương thức đã hoàn tất [truy xuất cả chỉ mục và mục] là thời gian xử lý nhiều hơn.
Sự kết luận
Các kết luận có thể được tổng hợp trong hai điểm chính sau:
- Vòng lặp cổ điển thực sự là nhanh nhất
- Phương pháp sử dụng hàm liệt kê là nhanh nhất giữa các phương pháp cung cấp tất cả các mục và chỉ mục.