Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Giao của 2 mảng trong Python (Lambda expression và filter function)


Tìm phần tử chung (intersection) của 2 mảng dùng filter() + lambda.

Thuật toán

  1. Định nghĩa hàm interSection(arr1, arr2).
  2. Dùng filter(lambda x: x in arr1, arr2) để giữ phần tử của arr2 cũng có trong arr1.
  3. É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 arr1 duyệt list (O(n)).
  • Cải tiến: Chuyển arr1 thành set → 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.