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

โปรแกรมหาจำนวนคนที่ไม่ซ้ำกันจากรายการอีเมลติดต่อใน Python

สมมติว่าเรามีรายการอีเมลในรายการ contacts แต่ละแถวอาจมีอีเมลมากกว่าหนึ่งของคนเดียวกัน ติดต่อ i ถือว่าซ้ำเมื่อมี j ที่ j < i และติดต่อ j แบ่งปันอีเมลร่วมกับ i เราต้องหาจำนวนคนที่ไม่ซ้ำกันใน contacts

เช่น ถ้าอินพุตคือ contacts = [["alex@gmail.com", "alex@yahoo.com"], ["alex_25@yahoo.com", "alex@gmail.com"], ["bob15@gmail.com"]] ผลลัพธ์จะเป็น 2 เพราะติดต่อ 1 และ 2 แบ่งปันอีเมลเดียวกัน จึงเป็นคนเดียวกัน มีคนไม่ซ้ำ 2 คน

ขั้นตอนการแก้ปัญหา

  1. ans := 0, found := เซตใหม่
  2. สำหรับแต่ละ c ใน contacts:
    • duplicate := False
    • สำหรับแต่ละ email ใน c:
      • ถ้า email ไม่อยู่ใน found ทำเครื่องหมายว่าเจอแล้ว
      • มิฉะนั้น duplicate := True
    • ถ้า duplicate == False ให้ ans += 1
  3. คืนค่า ans

ตัวอย่างการใช้งาน

def solve(contacts):
    ans = 0
    found = set()
    for c in contacts:
        duplicate = False
        for email in c:
            if email not in found:
                found.add(email)
            else:
                duplicate = True
        if not duplicate:
            ans += 1
    return ans

contacts = [
    ["alex@gmail.com", "alex@yahoo.com"],
    ["alex_25@yahoo.com", "alex@gmail.com"],
    ["bob15@gmail.com"]
]
print(solve(contacts))

อินพุต

[["alex@gmail.com", "alex@yahoo.com"], ["alex_25@yahoo.com", "alex@gmail.com"], ["bob15@gmail.com"]]

เอาต์พุต

2