Python foreach lambda

Vấn đề. Đưa ra một bộ sưu tập. Bạn muốn tạo một danh sách mới dựa trên tất cả các giá trị trong bộ sưu tập này. Mã sẽ chạy trong một dòng mã. Làm thế nào để bạn thực hiện điều này?

Ví dụ. Cho một mảng

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
4. Bạn cần tạo một mảng thứ hai
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
0 với tất cả các giá trị của
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
1—đồng thời thêm
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
2 vào mỗi giá trị. Đây là lớp lót nhiều lớp của bạn

a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]

Làm thế nào để bạn thực hiện điều này trong một dòng mã?

Câu trả lời. Không, bạn không cần hàm lambda. Những gì bạn đang tìm kiếm là một tính năng được gọi là hiểu danh sách. Đây là biểu thức một lớp hoàn thành điều này mà không cần hàm lambda

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]

Bạn có thể tự thử ví dụ này trong trình bao mã tương tác của chúng tôi

Hãy đi sâu vào một số thông tin cơ bản trong trường hợp bạn thắc mắc về cách hoạt động của tính năng hiểu danh sách. Dựa trên câu hỏi của bạn, tôi cũng nghi ngờ rằng bạn cũng không hoàn toàn hiểu các hàm lambda, vì vậy tôi cũng sẽ thêm một phần khác về các hàm lambda. Cuối cùng, bạn cũng sẽ tìm hiểu về một phương pháp thay thế thứ ba để giải quyết chính xác vấn đề này bằng cách sử dụng hàm lambda kết hợp với hàm map[] tích hợp sẵn của Python

Vì vậy, hãy ở lại với tôi—bạn sẽ trở thành một lập trình viên giỏi hơn trong quá trình này. 🙂

Danh sách hiểu 101

Hiểu danh sách là một cách nhỏ gọn để tạo danh sách. Công thức đơn giản là

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
3

  • Sự diễn đạt. Phải làm gì với từng phần tử danh sách?
  • Bối cảnh. Những yếu tố để lựa chọn?

Ví dụ

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
6 tạo danh sách
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
7

Giới thiệu đơn giản về hiểu danh sách trong Python


Xem video này trên YouTube

Hãy xem đoạn mã tương tác sau—bạn có thể tìm ra nội dung được in trên trình bao không?

Tôi sẽ giải thích cả hai cách tạo danh sách mới sau đây

Ví dụ. Giả sử bạn muốn lọc ra tất cả khách hàng kiếm được hơn $1.000.000 khỏi cơ sở dữ liệu của mình. Đây là điều mà một người mới không biết hiểu danh sách sẽ làm

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
0

Đoạn mã này cần bốn dòng chỉ để tạo danh sách khách hàng có giá trị cao [cá voi]

Thay vào đó, một cách tốt hơn nhiều để làm điều tương tự là sử dụng khả năng hiểu danh sách

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
1

Việc hiểu danh sách trở nên đơn giản khi bạn biết công thức

“Việc hiểu danh sách bao gồm các dấu ngoặc chứa một biểu thức, theo sau là mệnh đề for, sau đó là 0 hoặc nhiều mệnh đề for hoặc if. Kết quả sẽ là một danh sách mới xuất phát từ việc đánh giá biểu thức trong ngữ cảnh của các mệnh đề for và if theo sau nó. ”

Tài liệu Python chính thức

Đây là công thức để hiểu danh sách. Đó là điều bạn nên rút ra từ hướng dẫn này

Công thức. Hiểu danh sách bao gồm hai phần

‘[‘ + biểu thức + ngữ cảnh + ‘]’

Phần đầu tiên là biểu thức. Trong ví dụ trên, đó là biến

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
8. Nhưng bạn cũng có thể sử dụng một biểu thức phức tạp hơn chẳng hạn như
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
9. Sử dụng bất kỳ biến nào trong biểu thức của bạn mà bạn đã xác định trong ngữ cảnh trong câu lệnh vòng lặp. Xem ví dụ này

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
4

Phần thứ hai là bối cảnh. Bối cảnh bao gồm một số tùy ý các mệnh đề for và if. Mục tiêu duy nhất của ngữ cảnh là xác định [hoặc hạn chế] chuỗi các phần tử mà chúng ta muốn áp dụng biểu thức. Đó là lý do tại sao đôi khi bạn thấy những hạn chế phức tạp như thế này

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
5

Albrecht, một trong những độc giả trung thành của khóa học email “Coffee Break Python” của tôi, đã chỉ ra rằng bạn có thể chia nhỏ công thức hơn nữa bằng cách sử dụng bản thiết kế sau

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
6

Hướng dẫn chi tiết về chủ đề này có sẵn miễn phí tại hướng dẫn này trên blog Finxter

Hàm Lambda 101

Hàm lambda là một hàm ẩn danh trong Python. Nó bắt đầu bằng từ khóa

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
00, tiếp theo là danh sách không hoặc nhiều đối số được phân tách bằng dấu phẩy, tiếp theo là dấu hai chấm và biểu thức trả về. Ví dụ:
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
01 sẽ tính tổng của ba giá trị đối số
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
02

Đây là một ví dụ thực tế trong đó các hàm lambda được sử dụng để tạo hàm gia số

Tập thể dục. Thêm một tham số khác vào hàm lambda

Xem video hoặc đọc bài viết để tìm hiểu về hàm lambda trong Python

Hãy chơi Finxter - Hàm Lambda trong Python


Xem video này trên YouTube

Câu đố. Đây là một câu đố mã nhỏ để kiểm tra kỹ năng của bạn

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
0

Để kiểm tra sự hiểu biết của bạn, bạn có thể giải câu đố mã chính xác này với chủ đề “các hàm lambda trong Python” tại ứng dụng câu đố mã Finxter của tôi

Tìm bài viết chi tiết về hàm lambda tại đây

Phương pháp thay thế 3. bản đồ[] + lambda + danh sách[]

Thật thú vị, có một cách thứ ba để giải quyết vấn đề trên bằng cách sử dụng hàm

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
03 [và hàm lambda]

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
2

Bạn có thể tìm hiểu về hàm

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
04 trong video hướng dẫn của tôi tại đây

Làm chủ chức năng bản đồ Python [+Video]


Xem video này trên YouTube

Tuy nhiên, sẽ tốt hơn nếu bạn tránh chức năng bản đồ—nó không thể đọc được và kém hiệu quả hơn khả năng hiểu danh sách

Đi đâu từ đây?

Đủ lý thuyết. Hãy thực hành một số

Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa

Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế

Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không?

🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã của mình trực tuyến cũng như cách bạn có thể làm được—từ sự thoải mái của bạn

Tham gia hội thảo trên web miễn phí ngay bây giờ

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Tại sao lại sử dụng lambda thay vì vòng lặp for?

[x, y] -> x + y //Hàm này nhận 2 tham số và trả về tổng của chúng. Với các biểu thức lambda sẵn có, chúng ta có thể loại bỏ việc sử dụng các vòng lặp for truyền thống và thay thế nó bằng foreach với sự trợ giúp của các biểu thức lambda sẽ làm cho mã chương trình của chúng ta hiệu quả hơn và sẽ giảm dòng mã . .

Lambda có thể có vòng lặp trong Python không?

Giải pháp 1. Sử dụng hiểu danh sách. Sử dụng hàm lambda với vòng lặp for chắc chắn không phải là cách để giải quyết các vấn đề như thế này . Thay vào đó, bạn có thể chỉ cần sử dụng khả năng hiểu danh sách để lặp lại chuỗi/danh sách/bộ sưu tập đã cho và in nó cho phù hợp, như thể hiện trong giải pháp bên dưới.

Biểu thức lambda có nhanh hơn forEach không?

Ở đây thao tác I/O [ println ] chậm hơn nhiều so với tất cả các chi phí có thể có khi gọi lambda hoặc tạo trình vòng lặp. Nói chung forEach có thể nhanh hơn một chút vì nó thực hiện mọi thứ bên trong một phương thức duy nhất mà không cần tạo Iterator và gọi hasNext và next [được thực hiện hoàn toàn bởi for- .

Python lambda có thể có nhiều đối số không?

Hàm lambda có thể nhận bất kỳ số lượng đối số nào, nhưng chỉ có thể có một biểu thức .

Chủ Đề