Liệt kê Python có nhanh không?

Hãy nói rằng chúng ta có một danh sách. Chúng tôi muốn lặp lại danh sách này, in ra chỉ mục theo sau là phần tử danh sách hoặc giá trị tại chỉ mục đó. Hãy thực hiện điều này bằng cách sử dụng vòng lặp for

num_list= [42, 56, 39, 59, 99]for i in range(len(num_list)): 
print(i, num_list[i])
# output:
0 42
1 56
2 39
3 59
4 99

range() là một hàm có sẵn trong python cho phép chúng ta lặp qua một dãy số. Như đã thấy ở trên, chúng tôi sử dụng vòng lặp for để lặp qua một đối tượng phạm vi (là một loại có thể lặp lại), cho đến độ dài của danh sách của chúng tôi. Nói cách khác, chúng tôi bắt đầu với giá trị i là 0 và tăng dần (nhưng không bao gồm) độ dài của num_list, là 5. Sau đó, chúng tôi truy cập các phần tử của num_list tại chỉ mục thứ i bằng cách sử dụng dấu ngoặc vuông

Tuy nhiên, điều quan trọng là phải hiểu rằng chúng tôi không thực sự lặp lại num_list. Nói cách khác, tôi đóng vai trò là proxy cho chỉ mục mà chúng tôi có thể sử dụng để truy cập các phần tử từ num_list

Cách cắt chuỗi trong Python

Tìm hiểu cách cắt danh sách và chuỗi trong Python

hướng tới khoa học dữ liệu. com

Sử dụng hàm enumerate()

Thay vì sử dụng hàm range(), chúng ta có thể sử dụng hàm enumerate() có sẵn trong python. enumerate() cho phép chúng ta lặp qua một chuỗi nhưng nó theo dõi cả chỉ mục và phần tử

liệt kê (có thể lặp lại, bắt đầu = 0)

Hàm enumerate() nhận một đối số có thể lặp lại, chẳng hạn như danh sách, chuỗi, bộ hoặc từ điển. Ngoài ra, nó cũng có thể nhận một đối số tùy chọn, bắt đầu, chỉ định số mà chúng ta muốn bắt đầu đếm (mặc định là 0)

Sử dụng hàm enumerate(), chúng ta có thể viết lại vòng lặp for như sau

num_list= [42, 56, 39, 59, 99]for index, element in enumerate(num_list):
print(index, element)
# output:
0 42
1 56
2 39
3 59
4 99

Và đó là nó. Chúng ta không cần sử dụng hàm range(). Mã trông sạch hơn và Pythonic hơn

Từ điển hiểu trong Python

Cách sử dụng khả năng hiểu từ điển để tạo từ điển trong python

hướng tới khoa học dữ liệu. com

Cách liệt kê() hoạt động

Hàm enumerate() trả về một đối tượng liệt kê, là một trình vòng lặp. Khi mỗi phần tử được truy cập từ đối tượng liệt kê này, một bộ dữ liệu được trả về, chứa chỉ mục và phần tử tại chỉ mục đó. (chỉ mục, phần tử). Do đó, trong vòng lặp for ở trên, với mỗi lần lặp, nó sẽ gán các phần tử của bộ dữ liệu được trả về này cho các biến chỉ mục và phần tử. Nói cách khác, bộ trả về đang được giải nén bên trong câu lệnh for

for index, element in enumerate(num_list):# similar to:
index, element = (index, element)

Các bộ dữ liệu này có thể dễ dàng nhìn thấy hơn với ví dụ sau

name_list = ['Jane', 'John', 'Mike']list(enumerate(name_list))# [(0, 'Jane'), (1, 'John'), (2, 'Mike')]

Khi chúng ta gọi hàm list() trên đối tượng liệt kê (bộ lặp), nó sẽ trả về một danh sách các bộ, với mỗi bộ bao gồm chỉ mục và phần tử hoặc giá trị tương ứng của nó

Nếu bạn thích đọc những câu chuyện như thế này và muốn hỗ trợ tôi với tư cách là một nhà văn, hãy cân nhắc đăng ký để trở thành thành viên Medium. Đó là 5 đô la một tháng, cho phép bạn truy cập không giới hạn vào các câu chuyện trên Phương tiện. Nếu bạn đăng ký bằng liên kết của tôi, tôi sẽ kiếm được một khoản hoa hồng nhỏ

Python được biết đến là một ngôn ngữ lập trình chậm. Mặc dù thực tế là Python chậm hơn các ngôn ngữ khác, nhưng vẫn có một số cách để tăng tốc code Python của chúng ta

Làm sao?

Nếu chúng ta viết mã tiêu tốn ít bộ nhớ và dung lượng lưu trữ, chúng ta không chỉ hoàn thành công việc mà còn làm cho mã Python của chúng ta chạy nhanh hơn

Đây là một cách nhanh và cũng siêu nhanh để lặp lại trong Python mà tôi đã học được trong một trong các khóa học Python mà tôi đã tham gia (chúng tôi không bao giờ ngừng học. )

Vòng lặp trung bình

Giả sử chúng ta muốn tính tổng các số từ 1 đến 100000000 (có thể chúng ta sẽ không bao giờ làm điều đó nhưng con số lớn đó sẽ giúp tôi đưa ra quan điểm của mình)

Một cách tiếp cận điển hình là tạo một biến total_sum=0, lặp qua một phạm vi và tăng giá trị của total_sum lên i trên mỗi lần lặp lại

Điều này hoàn thành công việc, nhưng phải mất khoảng 6. 58 giây

Mặc dù hiện tại có vẻ không quá chậm nhưng tốc độ sẽ chậm hơn khi bạn thêm nhiều số 0 vào số bên trong phạm vi

Hãy tăng tốc độ này lên

Một cách nhanh hơn để lặp lại bằng cách sử dụng các chức năng tích hợp

Một cách nhanh hơn để lặp trong Python là sử dụng các hàm tích hợp sẵn

Trong ví dụ của chúng tôi, chúng tôi có thể thay thế vòng lặp for bằng hàm sum. Hàm này sẽ tính tổng các giá trị bên trong dãy số

Đoạn mã trên mất 0. 84 giây. Đó là cách nhanh hơn so với vòng lặp trước mà chúng tôi đã sử dụng. Đây là lý do tại sao chúng ta nên chọn các hàm tích hợp thay vì các vòng lặp

Nhưng vẫn còn chỗ để cải thiện

Một cách lặp siêu nhanh bằng Numpy

Vài tuần trước, trong một khóa học về khoa học dữ liệu, tôi đã học được rằng một trong những phương pháp thực hành công nghệ phần mềm mà tôi nên tuân theo để trở thành một nhà khoa học dữ liệu giỏi hơn là tối ưu hóa mã của mình

Chúng ta có thể tối ưu hóa các vòng lặp bằng cách vector hóa các thao tác. Đây là một/hai bậc độ lớn nhanh hơn so với Python thuần túy tương đương của chúng (đặc biệt là trong các phép tính số)

Vectorization là thứ chúng ta có thể nhận được với NumPy. Numpy là một thư viện có cấu trúc dữ liệu hiệu quả được thiết kế để chứa dữ liệu ma trận. Nó chủ yếu được viết bằng C, vì vậy tốc độ là thứ bạn có thể tin tưởng

Hãy thử sử dụng các phương thức Numpy .sum.arange thay vì các hàm Python

Điều này hoàn thành công việc trong 0. 22 giây. Đây là cách nhanh hơn so với các phương pháp trước đây

Đây là lý do tại sao bạn nên sử dụng các phép toán vectơ trên các vòng lặp bất cứ khi nào có thể

Đưa các vòng lặp và Numpy vào thử nghiệm với nhiều tính toán hơn

Cho đến giờ chúng ta đã thấy một ứng dụng đơn giản của Numpy, nhưng điều gì sẽ xảy ra nếu chúng ta không chỉ có một vòng lặp for mà còn có một điều kiện if và nhiều tính toán hơn để thực hiện?

Đây là khi Numpy rõ ràng vượt trội so với các vòng lặp

Hãy tưởng tượng chúng ta có một mảng điểm thi ngẫu nhiên (từ 1 đến 100) và chúng ta muốn lấy điểm trung bình của những người thi trượt (điểm <70)

Đây là cách chúng tôi làm điều này với vòng lặp for

Điều đó mất khoảng 15. 7 giây. Không tệ, nhưng chúng ta có thể nhận được kết quả nhanh hơn với Numpy

Đây là cách chúng tôi làm điều này với Numpy

Đoạn mã trên mất khoảng 0. 78 giây. Đó là cách nhanh hơn và mã đơn giản

Học Khoa học dữ liệu với Python?

Nếu bạn thích đọc những câu chuyện như thế này và muốn hỗ trợ tôi với tư cách là một nhà văn, hãy cân nhắc đăng ký để trở thành thành viên Medium. Đó là 5 đô la một tháng, cho phép bạn truy cập không giới hạn vào hàng nghìn hướng dẫn về Python và các bài báo về Khoa học dữ liệu. Nếu bạn đăng ký bằng liên kết của tôi, tôi sẽ kiếm được một khoản hoa hồng nhỏ mà bạn không phải trả thêm phí

Điểm liệt kê Python là gì?

Python's enumerate() cho phép bạn viết Pythonic cho các vòng lặp khi bạn cần số đếm và giá trị từ một lần lặp . Ưu điểm lớn của enumerate() là nó trả về một bộ có bộ đếm và giá trị, do đó bạn không phải tự tăng bộ đếm.

Python zip có nhanh hơn không?

Mặc dù những người khác đã chỉ ra rằng zip trên thực tế mang tính Pythonic hơn liệt kê , nhưng tôi đến đây để xem liệu nó có hiệu quả hơn không. Theo thử nghiệm của tôi, zip nhanh hơn khoảng 10 đến 20% so với liệt kê khi chỉ cần truy cập và sử dụng song song các mục từ nhiều danh sách .

Sự khác biệt giữa liệt kê và phạm vi trong Python là gì?

Thay vì sử dụng hàm range(), chúng ta có thể sử dụng hàm enumerate() có sẵn trong python. enumerate() cho phép chúng ta lặp qua một chuỗi nhưng nó theo dõi cả chỉ mục và phần tử . Hàm enumerate() nhận một đối số có thể lặp lại, chẳng hạn như danh sách, chuỗi, bộ hoặc từ điển.

Điều gì xảy ra khi bạn liệt kê một danh sách trong Python?

Hàm liệt kê trong Python chuyển đối tượng thu thập dữ liệu thành đối tượng liệt kê . Liệt kê trả về một đối tượng chứa bộ đếm làm khóa cho từng giá trị trong một đối tượng, làm cho các mục trong bộ sưu tập dễ dàng truy cập hơn.