Trước tiên, bạn cần hiểu dòng lambda. Hoàn toàn chính xác như anh Hùng đề cập, để mình cho bạn vài ví dụ
>>> 5 in [] and [] or [] + [5] # 5 có trong [] hay không? nếu có thì trả về [] + [5] không thì []
[5]
>>> 5 in [3] and [3] or [3] + [5] # 5 có trong [3] hay không? nếu có thì trả về [3] + [5] không thì [3]
[3, 5]
>>> 5 in [3, 5] and [3, 5] or [3, 5] + [5] # 5 có trong [3, 5] hay không? nếu có thì trả về [3, 5] + [5] không thì [3, 5]
[3, 5]
Có thể xem công thức tổng quát của nó là
Điều kiện and Giá trị trả về nếu False or Giá trị trả về nếu True
Tiếp đến là cái hàm reduce. Ở đây mình sẽ nói trường hợp 3 arguments. Còn bạn muốn đủ thì lên mạng đọc, có docs.
Hàm reduce sẽ như sau
def reduce(function, iterable, initializer):
for element in iterable:
initializer = function(initializer, element)
return value
Bạn cố suy ngẫm hàm trên nhé. Nếu xong rồi, hãy kéo xuống!
Hiểu hàm reduce ở trên rồi. Đây là cách viết rõ ràng của dòng reduce của bạn
def lambda(r, v):
if v in r:
return r
else:
return r + [v]
l = [5, 6, 6, 1, 1, 2, 2, 3, 4]
p = []
for element in l:
p = lambda(p, element)
print(p)