Hướng dẫn python filter(lambda multiple conditions) - bộ lọc python (lambda nhiều điều kiện)

['1', '2', '4', 'c']

Thất bại cho điều kiện

x[0] != "1"

cũng như

x[1] != "2"

Thay vì sử dụng

x[0] != "1"
7, tôi tin rằng cách tự nhiên và dễ đọc hơn là:

lambda x: (x[0], x[1], x[2]) != ('1','2','3')

Vì tò mò, tôi đã so sánh ba phương pháp, er ... so sánh và kết quả như mong đợi: danh sách cắt lát là chậm nhất, sử dụng các bộ dữ liệu nhanh hơn và sử dụng các toán tử Boolean là nhanh nhất. Chính xác hơn, ba cách tiếp cận được so sánh là

list_slice_compare = lambda x: x[:3] != [1,2,3]

tuple_compare = lambda x: (x[0],x[1],x[2]) != (1,2,3)

bool_op_compare = lambda x: x[0]!= 1 or x[1] != 2 or x[2]!= 3

Và kết quả, tương ứng:

In [30]: timeit.Timer(setup="import timeit,random; rand_list = [random.randint(1,9) for _ in range(4)]; list_slice_compare = lambda x: x[:3] != [1,2,3]", stmt="list_slice_compare(rand_list)").repeat()
Out[30]: [0.3207617177499742, 0.3230015148823213, 0.31987868894918847]

In [31]: timeit.Timer(setup="import timeit,random; rand_list = [random.randint(1,9) for _ in range(4)]; tuple_compare = lambda x: (x[0],x[1],x[2]) != (1,2,3)", stmt="tuple_compare(rand_list)").repeat()
Out[31]: [0.2399928924012329, 0.23692036176475995, 0.2369164465619633]

In [32]: timeit.Timer(setup="import timeit,random; rand_list = [random.randint(1,9) for _ in range(4)]; bool_op_compare = lambda x: x[0]!= 1 or x[1] != 2 or x[2]!= 3", stmt="bool_op_compare(rand_list)").repeat()
Out[32]: [0.144389363900018, 0.1452672728203197, 0.1431527621755322]

2 phút đọc

Lambda là một chức năng Python một lớp được sử dụng để nhanh chóng xây dựng một chức năng một cách dễ dàng, trong bài đăng này, chúng tôi sẽ thấy cách sử dụng IF-Else hoặc nhiều điều kiện để đánh giá biểu thức bằng các hàm Lambda.

Ngoài ra, chúng ta sẽ xem cách lọc danh sách bằng cách áp dụng các điều kiện trong vòng lặp và lọc trong hàm Lambda

Lambda If-Else & Elif với nhiều điều kiện

Chúng ta có thể sử dụng if-Else và Elif và nhiều điều kiện sử dụng chức năng Lambda trong Python.

Hãy lấy một ví dụ để hiểu cách sử dụng các điều kiện trong Lambda

Condition:

Chúng tôi muốn gán lớp dựa trên điểm số thu được trong bài kiểm tra, đây là điều kiện để gán các điểm:

if grade > 7:
    A+
elif grade >= 5 and grade <= 7:
    A
else grade <5:
    B

Chúng ta có thể viết nhiều điều kiện này trong Lambda như hình dưới đây

grade = lambda x: 'A+' if x>7 else 'A' if x>=5 and x<=7 else 'B'

Ngoài ra, chúng tôi cũng có thể viết các điều kiện trên bằng Lambda như hình dưới đây

lambda x : (false,true)[Condition]

grade = lambda score : ((((('Not sure' , 'B')[score < 5]), 'A')[(score>=5 | score<=7)]), 'A+')[score>7]

Tuyên bố có điều kiện ở Lambda

Chúng tôi cũng có thể đánh giá một tuyên bố nếu nó đúng hoặc sai bằng Lambda.

Hãy để xác minh xem điều kiện này là đúng hay sai

x[0] != "1"
0

Sử dụng Lambda:

Chúng tôi có thể sử dụng toán tử bitwise trong Lambda để tạo điều kiện, ở đây chúng tôi muốn xác minh xem điểm số lớn hơn 7 và nhỏ hơn 10 hoặc nếu nó nhỏ hơn 5 hoặc không

x[0] != "1"
1

Lambda khác không làm gì cả

Chúng ta cũng chỉ có thể viết câu lệnh IF mà không có một câu như thế này

Một lambda, giống như bất kỳ chức năng nào, phải có giá trị trả về. Không có khác không hoạt động vì nó không chỉ định những gì sẽ trở lại nếu không x> 7

x[0] != "1"
2

Danh sách bộ lọc Lambda với nhiều điều kiện

Lọc danh sách với Lambda sẽ trả về tất cả các yếu tố của danh sách trả về đúng cho chức năng Lambda

Các điều kiện được tham gia bởi

x[0] != "1"
8, chúng sẽ trả lại
x[0] != "1"
9 chỉ khi tất cả các điều kiện là
x[0] != "1"
9 và nếu chúng được tham gia bởi
x[0] != "1"
7, chúng sẽ trở lại
x[0] != "1"
9 khi lần đầu tiên được đánh giá là
x[0] != "1"
9

x[0] != "1"
3

Trong trường hợp này, mục duy nhất trong danh sách thỏa mãn điều kiện được trả lại

Lambda đánh giá danh sách với nhiều điều kiện bên trong một vòng lặp

Chúng tôi cũng có thể sử dụng Lambda để lặp qua danh sách và đánh giá một điều kiện

Hãy để xác định một chức năng với tất cả các điều kiện mà chúng tôi muốn đánh giá

x[0] != "1"
4

Sẽ xác định chức năng Lambda để ánh xạ từng mục trong danh sách dữ liệu cho chức năng này

x[0] != "1"
5

Hãy để đánh giá điểm cho từng mục trong danh sách dữ liệu

x[0] != "1"
6