Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – หาสตริงที่ไม่มีตัวอักษรซ้ำกันข้ามลิสต์ (Disjoint Strings)

เมื่อต้องการหาคู่สตริงที่ไม่มีตัวอักษรซ้ำกัน (disjoint) ระหว่างสองลิสต์ สามารถใช้ฟังก์ชัน recursive ที่มี functools.reduce, lambda และ set ได้

ตัวอย่าง

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("The first list is : ")
print(my_list_1)
print("The second list is :")
print(my_list_2)
my_result = list(determine_disjoint_pairs([my_list_1, my_list_2]))
print("The result is :")
print(my_result)

ผลลัพธ์

The first list is : ['python', 'is', 'fun']
The second list is : ['its', 'awesome', 'learning']
The result is : [('fun', 'its'), ('fun', 'awesome')]

คำอธิบาย

  • นำเข้า reduce จาก functools

  • กำหนดฟังก์ชัน recursive determine_disjoint_pairs ใช้ reduce กับ lambda ตรวจสอบ intersection ของ set ตัวอักษร

  • ถ้าไม่มีข้อมูลเหลือ และ intersection ว่าง (disjoint) yield tuple ผลลัพธ์

  • ถ้ายังมีข้อมูล ใช้ list comprehension เรียก recursive ต่อกับแต่ละตัวเลือก

  • เรียกฟังก์ชันกับสองลิสต์ แปลง generator เป็นลิสต์แสดงผล