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

Python – Chuỗi không giao nhau giữa các danh sách


Khi cần tìm các cặp chuỗi không giao nhau (disjoint) giữa hai danh sách, ta định nghĩa hàm đệ quy dùng lambda, reduce và yield.

Ví dụ

from functools import reduce

def determine_disjoint_pairs(disjoint_data, my_result=[]):
    if not disjoint_data and not reduce(lambda a, b: set(a) & set(b), my_result):
        yield tuple(my_result)
    elif disjoint_data:
        yield [idx for k in disjoint_data[0] for idx in determine_disjoint_pairs(disjoint_data[1:], my_result + [k])]

my_list_1 = ["python", "is", "fun"]
my_list_2 = ["its", "awesome", "learning"]
print("Danh sách đầu tiên:")
print(my_list_1)
print("Danh sách thứ hai:")
print(my_list_2)
my_result = list(determine_disjoint_pairs([my_list_1, my_list_2]))
print("Kết quả:")
print(my_result)

Kết quả

Danh sách đầu tiên: ['python', 'is', 'fun']
Danh sách thứ hai: ['its', 'awesome', 'learning']
Kết quả: [('fun', 'its'), ('fun', 'awesome')]

Giải thích

  • Hàm determine_disjoint_pairs đệ quy tạo các cặp từ hai danh sách.

  • Dùng reduce với lambda kiểm tra giao của các tập hợp (set) trong my_result.

  • Nếu không có dữ liệu và không giao nhau, yield tuple kết quả.

  • Ngược lại, duyệt phần tử đầu tiên của disjoint_data, gọi đệ quy với phần còn lại.

  • Kết quả là các cặp chuỗi không có ký tự chung.