Tìm phần tử chung (intersection) của 2 mảng dùng filter() + lambda.
Thuật toán
- Định nghĩa hàm
interSection(arr1, arr2). - Dùng
filter(lambda x: x in arr1, arr2)để giữ phần tử của arr2 cũng có trong arr1. - Ép kiểu
list()để lấy kết quả.
Ví dụ
def interSection(arr1, arr2):
# Lọc phần tử của arr2 mà cũng có trong arr1
common = list(filter(lambda x: x in arr1, arr2))
print("Giao của arr1 & arr2:", common)
if __name__ == "__main__":
arr1 = ['t','u','t','o','r','i','a','l']
arr2 = ['p','o','i','n','t']
interSection(arr1, arr2)
Kết quả
Giao của arr1 & arr2: ['o', 'i', 't']
Phân tích độ phức tạp & Cải tiến
- Code trên: O(len(arr1) * len(arr2)) do
x in arr1duyệt list (O(n)). - Cải tiến: Chuyển
arr1thànhset→ O(1) lookup.
def interSection_fast(arr1, arr2):
set1 = set(arr1)
common = list(filter(lambda x: x in set1, arr2))
return common
# Hoặc dùng set intersection trực tiếp (nhanh nhất, pythonic)
def interSection_set(arr1, arr2):
return list(set(arr1) & set(arr2))
Kết luận
Bài gốc demo filter + lambda đúng ý nghĩa giáo dục. Thực tế production nên dùng set(arr1) & set(arr2) cho hiệu năng O(n+m) và code ngắn gọn.