Hướng dẫn how to reduce for loops in python - cách giảm vòng lặp trong python

Python cung cấp cho chúng tôi nhiều kiểu mã hóa.

Theo một cách nào đó, nó là khá bao gồm.

Người ta có thể đến từ bất kỳ ngôn ngữ nào và bắt đầu viết Python.

Tuy nhiên, học cách viết một ngôn ngữ và viết một ngôn ngữ một cách được tối ưu hóa là hai điều khác nhau.

Trong loạt bài đăng này có tên Python Short, tôi sẽ giải thích một số cấu trúc đơn giản nhưng rất hữu ích được cung cấp bởi Python, một số mẹo thiết yếu và một số trường hợp sử dụng tôi đưa ra thường xuyên trong công việc khoa học dữ liệu của mình.

Trong bài đăng này, tôi sẽ nói về các vòng lặp trong Python và cách bạn nên tránh chúng bất cứ khi nào có thể.I am going to talk about for loops in Python and how you should avoid them whenever possible.

3 cách viết một vòng lặp:

Hãy để tôi giải thích điều này với một tuyên bố ví dụ đơn giản.

Giả sử bạn muốn lấy tổng số bình phương trong một danh sách.sum of squares in a list.

Đây là một vấn đề hợp lệ mà tất cả chúng ta phải đối mặt trong việc học máy bất cứ khi nào chúng ta muốn tính toán khoảng cách giữa hai điểm theo chiều n.

Bạn có thể làm điều này bằng cách sử dụng các vòng lặp dễ dàng.

Trên thực tế, tôi sẽ chỉ cho bạn ** ba cách để thực hiện cùng một nhiệm vụ mà tôi đã thấy mọi người sử dụng và cho phép bạn chọn cho chính mình mà bạn tìm thấy tốt nhất. **

x = [1,3,5,7,9]
sum_squared = 0

for i in range(len(x)):
    sum_squared+=x[i]**2

Bất cứ khi nào tôi thấy mã trên trong cơ sở mã Python, tôi hiểu rằng người đó đã đến từ nền C hoặc Java.

Một cách ** một chút pythonic ** của việc làm điều tương tự là:

x = [1,3,5,7,9]
sum_squared = 0

for y in x:
    sum_squared+=y**2

Better.

Tôi đã không lập chỉ mục danh sách. Và mã của tôi dễ đọc hơn.

Tuy nhiên, cách pythonic để làm nó là trong một dòng.

x = [1,3,5,7,9]
sum_squared = sum([y**2 for y in x])

Cách tiếp cận này được gọi là sự hiểu biết danh sách, và đây rất có thể là một trong những lý do mà tôi yêu thích Python.

Bạn cũng có thể sử dụng nếu trong một danh sách hiểu.

Hãy nói rằng chúng tôi muốn có một danh sách các số bình phương cho các số chẵn.

x = [1,2,3,4,5,6,7,8,9]
even_squared = [y**2 for y in x if y%2==0]
--------------------------------------------
[4,16,36,64]

if-else?

Điều gì sẽ xảy ra nếu chúng ta muốn có số bình phương cho chẵn và khối cho ODD?

x = [1,2,3,4,5,6,7,8,9]
squared_cubed = [y**2 if y%2==0 else y**3 for y in x]
--------------------------------------------
[1, 4, 27, 16, 125, 36, 343, 64, 729]

Great!!!

Hướng dẫn how to reduce for loops in python - cách giảm vòng lặp trong python

Vì vậy, về cơ bản làm theo các hướng dẫn cụ thể: Bất cứ khi nào bạn cảm thấy muốn viết một tuyên bố, bạn nên tự hỏi mình những câu hỏi sau,guidelines: Whenever you feel like writing a for statement, you should ask yourself the following questions,

  • Nó có thể được thực hiện mà không cần một vòng lặp? Pythonic nhất

  • Nó có thể được thực hiện bằng cách sử dụng danh sách hiểu? Nếu có, sử dụng nó.list comprehension? If yes, use it.

  • Tôi có thể làm điều đó mà không cần lập chỉ mục mảng không? Nếu không, hãy nghĩ về việc sử dụng liệt kê

Liệt kê là gì?

Đôi khi chúng ta cần cả hai chỉ mục trong một mảng cũng như giá trị trong một mảng.

Trong những trường hợp như vậy, tôi thích sử dụng liệt kê hơn là lập chỉ mục danh sách.enumerate rather than indexing the list.

L = ['blue', 'yellow', 'orange']
for i, val in enumerate(L):
    print("index is %d and value is %s" % (i, val))
---------------------------------------------------------------
index is 0 and value is blue
index is 1 and value is yellow
index is 2 and value is orange

Quy tắc là:

Không bao giờ lập chỉ mục một danh sách, nếu bạn có thể làm mà không có nó.

Thử sử dụng từ điển hiểu

Ngoài ra, hãy thử sử dụng sự hiểu biết từ điển, đây là một bổ sung tương đối mới trong Python. Cú pháp khá giống với sự hiểu biết danh sách.dictionary comprehension, which is a relatively new addition in Python. The syntax is pretty similar to List comprehension.

Hãy để tôi giải thích bằng một ví dụ. Tôi muốn có được một từ điển với (giá trị bình phương: bình phương) cho mọi giá trị trong x.

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 for k in x}
---------------------------------------------------------
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

Điều gì sẽ xảy ra nếu tôi muốn một dict chỉ cho các giá trị chẵn?

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 for k in x if x%2==0}
---------------------------------------------------------
{2: 4, 4: 16, 6: 36, 8: 64}

Điều gì sẽ xảy ra nếu chúng ta muốn giá trị bình phương cho số phím và số khối cho khóa lẻ?

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 if k%2==0 else k**3 for k in x}
---------------------------------------------------------
{1: 1, 2: 4, 3: 27, 4: 16, 5: 125, 6: 36, 7: 343, 8: 64, 9: 729}

Sự kết luận

Để kết luận, tôi sẽ nói rằng trong khi có vẻ dễ dàng chuyển giao kiến ​​thức mà bạn có được từ các ngôn ngữ khác sang Python, bạn đã giành chiến thắng để có thể đánh giá cao vẻ đẹp của Python nếu bạn tiếp tục làm điều đó. Python mạnh hơn nhiều khi chúng ta sử dụng cách của nó và quyết định thú vị hơn nhiều.

Vì vậy, sử dụng danh sách toàn diện và định hướng toàn diện khi bạn cần vòng lặp. Sử dụng Enumate nếu bạn cần chỉ mục mảng.

Tránh các vòng như bệnh dịch hạch

Mã của bạn sẽ dễ đọc hơn và có thể duy trì trong thời gian dài.

Ngoài ra, nếu bạn muốn tìm hiểu thêm về Python 3, tôi muốn gọi ra một khóa học tuyệt vời về việc học Python cấp trung cấp từ Đại học Michigan. Hãy kiểm tra nó ra.

Tôi cũng sẽ viết nhiều bài viết thân thiện với người mới bắt đầu hơn trong tương lai. Hãy cho tôi biết bạn nghĩ gì về bộ truyện. Theo dõi tôi ở mức trung bình hoặc đăng ký vào blog của tôi để được thông báo về họ.

Như mọi khi, tôi hoan nghênh phản hồi và phê bình mang tính xây dựng và có thể đạt được trên Twitter @MLWHiz.

Hướng dẫn how to reduce for loops in python - cách giảm vòng lặp trong python

Nhận xét được cung cấp bởi

Làm thế nào để bạn giảm nhiều vòng trong Python?

5 cách để thoát ra khỏi các vòng lồng nhau trong Python. Không thanh lịch như nó phải được. ....
Thêm một biến cờ. Đây là một giải pháp hiệu quả. ....
Nâng cao một ngoại lệ. Nếu chúng ta không thể sử dụng từ khóa Break như mong đợi. ....
Kiểm tra lại điều kiện tương tự. ....
Sử dụng cú pháp For-Else. ....
Đặt nó vào một chức năng ..

Giảm nhanh hơn so với Loop Python?

Vì giảm () được viết bằng C, vòng lặp bên trong của nó có thể nhanh hơn một con trăn rõ ràng cho vòng lặp.Giảm () của Python ban đầu là một chức năng tích hợp (và vẫn ở Python 2. X), nhưng nó đã được chuyển sang functools.its internal loop can be faster than an explicit Python for loop. Python's reduce() was originally a built-in function (and still is in Python 2. x), but it was moved to functools.

Làm thế nào để bạn tăng tốc một vòng lặp python?

Tài liệu nền tảng nhận dạng Loginradius..
Một vài cách để tăng tốc mã Python của bạn ..
Sử dụng cấu trúc dữ liệu thích hợp ..
Giảm sử dụng cho vòng lặp ..
Sử dụng danh sách hiểu ..
Sử dụng nhiều bài tập ..
Không sử dụng các biến toàn cầu ..
Sử dụng chức năng thư viện ..
Chuỗi Concatenate với tham gia ..

Làm thế nào để bạn giảm phạm vi trong Python?

Giảm với phạm vi () Bạn có một loạt các số nhỏ hơn số trước 2, giá trị tuyệt đối của bước bạn cung cấp.Cách pythonic nhất để tạo ra một phạm vi giảm là sử dụng phạm vi (bắt đầu, dừng, bước).Nhưng Python có chức năng đảo ngược tích hợp.range(start, stop, step) . But Python does have a built-in reversed function.