Hướng dẫn what can i use instead of for loops in python? - tôi có thể sử dụng cái gì thay cho các vòng lặp trong python?
Thuộc tính hình ảnh cho http://critical-thinkers.com/2015/01/the-critical-thinking-buddy-system/ Tiêu đề ban đầu là Never Never Write For Loops Again, nhưng tôi nghĩ rằng mọi người đã nói với mọi người khi nghĩ rằng vòng lặp là xấu. Đây là ý định của tôi. Bài viết này cung cấp một số lựa chọn thay thế cho các trường hợp, IMHO, don don cần các vòng lặp rõ ràng và tôi nghĩ rằng nó tốt hơn là không viết chúng, hoặc ít nhất, thực hiện một bài tập tinh thần nhanh chóng để nghĩ ra một giải pháp thay thế. Show
Có một số cách để viết lại các vòng lặp trong Python. Tạm dừng bản thân khi bạn có sự thôi thúc để viết một vòng lặp vào lần tới. Hãy tự hỏi mình, tôi có thực sự cần một vòng lặp để thể hiện ý tưởng không? Hay là có một cách thậm chí còn biểu cảm hơn? " Bài viết này không phải là cố gắng để ra lệnh theo cách bạn nghĩ về việc viết mã. Thay vào đó, bài viết này chỉ cung cấp cho bạn một quan điểm khác. Hy vọng rằng, bạn sẽ bị sốc và học được điều gì đó mới. Khá gây sốc, phải không? Đây là một thách thức. Tôi thách thức bạn tránh viết vòng lặp trong mọi kịch bản. Ngoài ra, tôi thách thức bạn tìm thấy các kịch bản rất khó để viết bất cứ điều gì khác ngoại trừ một vòng lặp. Hãy chia sẻ những phát hiện của bạn. Tôi muốn nghe về họ. Nó đã được một thời gian kể từ khi tôi bắt đầu khám phá các tính năng ngôn ngữ tuyệt vời trong Python. Lúc đầu, nó chỉ là một thử thách mà tôi đã đưa ra để thực hành bằng cách sử dụng nhiều tính năng ngôn ngữ hơn thay vì những tính năng tôi học được từ ngôn ngữ lập trình khác. Và mọi thứ chỉ trở nên vui vẻ hơn! Không chỉ mã trở nên ngắn hơn và sạch hơn, mà cả mã trông có cấu trúc và kỷ luật hơn. Tôi sẽ nhận được những lợi ích đó nhiều hơn trong bài viết này. Nhưng trước tiên, hãy để Lùi lùi lại một bước và xem những gì mà trực giác đằng sau việc viết một vòng lặp:
May mắn thay, đã có những công cụ tuyệt vời được xây dựng thành Python để giúp bạn hoàn thành các mục tiêu! Tất cả những gì bạn cần là thay đổi tâm trí của bạn và nhìn vào những thứ ở một góc độ khác. Những gì bạn đạt được khi không viết cho vòng lặp ở khắp mọi nơi
Hãy cùng xem bộ xương mã bên dưới: with ...: Trong ví dụ này, chúng tôi đang xử lý nhiều lớp mã. Điều này là khó đọc. Vấn đề tôi tìm thấy trong mã này là nó đang pha trộn logic hành chính ( result = [] 4, result = [] 5) với logic kinh doanh (result = [] 6, result = [] 7) bằng cách cung cấp cho họ sự cố định ở khắp nơi. Nếu bạn bị kỷ luật về việc chỉ sử dụng thụt lề cho logic hành chính, logic kinh doanh cốt lõi của bạn sẽ nổi bật ngay lập tức.administrative logic (the result = [] 4, result = [] 5) with the business logic (the result = [] 6, result = [] 7) by giving them the indentation
ubiquitously. If you are disciplined about using indentation only for administrative logic, your core business logic would stand out immediately.
Tôi ước rằng mã là phẳng hơn, tôi nghe thấy bạn. Các công cụ bạn có thể sử dụng để tránh sử dụng vòng lặp cho vòng lặp1. Liệt kê biểu thức hiểu / máy phát điệnHãy cùng xem một ví dụ đơn giản. Về cơ bản, bạn muốn biên dịch một chuỗi dựa trên một chuỗi hiện có khác: result = [] Bạn có thể sử dụng result = [] 8 nếu bạn yêu thích MapReduce, hoặc, Python có danh sách hiểu biết:result = [do_something_with(item) for item in item_list] Tương tự, nếu bạn muốn chỉ có một trình lặp, bạn có thể sử dụng biểu thức máy phát với gần như cùng một cú pháp. (Làm thế nào bạn có thể không yêu thích sự nhất quán trong Python?) result = (do_something_with(item) for item in item_list) 2. Chức năngSuy nghĩ theo cách lập trình cao hơn, nhiều chức năng hơn, nếu bạn muốn ánh xạ một chuỗi sang một chuỗi khác, chỉ cần gọi hàm result = [] 8. (Hãy là khách của tôi để sử dụng danh sách hiểu biết ở đây.)doubled_list = map(lambda x: x * 2, old_list) Nếu bạn muốn giảm một chuỗi vào một giá trị duy nhất, hãy sử dụng result = [do_something_with(item) for item in item_list] 0from functools import reduce Ngoài ra, rất nhiều chức năng tích hợp của Python, tiêu thụ Iterables (trình tự hoàn toàn có thể lặp lại theo định nghĩa): >>> a = list(range(10)) 3. Trích xuất các chức năng hoặc máy phát điệnHai phương pháp trên là tuyệt vời để đối phó với logic đơn giản hơn. Làm thế nào về logic phức tạp hơn? Là một lập trình viên, chúng tôi viết các chức năng để trừu tượng hóa những điều khó khăn. Ý tưởng tương tự được áp dụng ở đây. Nếu bạn đang viết bài này: results = [] Rõ ràng bạn đang giao quá nhiều trách nhiệm cho một khối mã duy nhất. Thay vào đó, tôi đề xuất bạn làm: def process_item(item): Làm thế nào về các vòng lặp lồng nhau? results = [] Danh sách hiểu biết trở lại của bạn: result = [] 0Làm thế nào nếu bạn có một số trạng thái nội bộ trong khối mã để giữ? result = [] 1Hãy để trích xuất một máy phát điện để đạt được điều này: result = [] 2
Tốt thôi, hãy để thử như sau. 4. Don Tiết viết nó cho mình. itertools giúp bạn được bảo hiểmMô -đun này chỉ đơn giản là rực rỡ. Tôi tin rằng mô-đun này bao gồm 80% các trường hợp mà bạn khiến bạn muốn viết cho vòng lặp. Ví dụ: ví dụ cuối cùng có thể được viết lại thành: result = [] 3Tôi biết rồi mà. Đây là một ví dụ khủng khiếp. Tôi chỉ đang cố gắng chứng minh một điểm-có thể loại bỏ các vòng lặp trong mã của bạn. Tuy nhiên, đây không phải là sự loại bỏ tốt hơn. Ví dụ này rất phức tạp và khó tiêu hóa và sẽ khiến đồng nghiệp của bạn ghét bạn vì đã thể hiện. Ngoài ra, nếu bạn lặp đi lặp lại trên các chuỗi tổ hợp, có result = [do_something_with(item) for item in item_list] 1, result = [do_something_with(item) for item in item_list] 2, result = [do_something_with(item) for item in item_list] 3 để sử dụng.Sự kết luận
Hoạt động
Tôi có thể sử dụng gì thay vì một vòng lặp?> foreach () Phương thức này có một hàm và thực thi nó cho mọi yếu tố.Sự thay thế này cho vòng lặp For For For chỉ được sử dụng khi chúng ta không có chức năng bậc cao hơn để sử dụng trong tình huống đó.forEach()
This method takes a function and executes it for every element. This alternative for “for” loop is only used when we do not have a better higher order function to use in that situation.
Tôi có thể sử dụng gì thay vì một vòng gấu trúc cho vòng lặp?Hầu hết thời gian, bạn có thể sử dụng một giải pháp vector hóa để thực hiện các hoạt động gấu trúc của mình.Thay vì sử dụng thao tác loại For For Loop, liên quan đến việc lặp lại thông qua một bộ dữ liệu một giá trị tại một thời điểm, vector hóa có nghĩa là bạn thực hiện một giải pháp hoạt động trên toàn bộ các giá trị cùng một lúc.vectorized solution to perform your Pandas operations. Instead of using a “for loop” type operation that involves iterating through a set of data one value at a time, vectorization means you implement a solution that operates on a whole set of values at once . |