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

โปรแกรมค้นหาตัวเลขที่หายไปจากสองรายการตัวเลขใน Python


สมมติว่าเรามีรายการตัวเลขสองรายการคือ nums1 และ nums2 มีองค์ประกอบบางอย่างที่ไม่จำเป็นต้องมีลักษณะเฉพาะ แต่สองรายการนี้แทนการเรียงสับเปลี่ยนของตัวเลขชุดเดียวกันที่ต่างกัน อย่างไรก็ตามบางส่วนของพวกเขาหายไป เราต้องหาตัวเลขที่หายไปของสองรายการนี้และพิมพ์ออกมาทั้งหมด

ดังนั้น หากอินพุตมีค่าเท่ากับ nums1 =[4,5,8,8,6,9] nums2 =[3,4,4,8,8,8,6,9,5,8] ผลลัพธ์จะเป็น เป็น [3,4,8,8] เพราะเราจะเห็นว่า 3 ไม่มีอยู่ใน nums1 แต่อยู่ใน nums2 ดังนั้นจึงขาดหายไป มี 4 อยู่ในทั้งคู่ แต่ใน nums2 มี 4s สองตัว แต่ใน nums1 มีเพียงตัวเดียว ดังนั้น 4 ตัวจึงหายไป ในทำนองเดียวกัน nums2 มี 8s สี่ตัว แต่ใน nums1 มีเพียง 2 เท่านั้น ดังนั้นจึงไม่มี 2 รายการ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • c1 :=รายการที่มีความถี่ของแต่ละองค์ประกอบที่มีอยู่ใน nums1
  • c2 :=รายการที่มีความถี่ของแต่ละองค์ประกอบที่มีอยู่ใน nums2
  • all_nums :=ชุดที่มีตัวเลขที่แตกต่างกันทั้งหมดจาก nums1 และ nums2
  • res :=รายการใหม่
  • สำหรับแต่ละ n ใน all_nums ทำ
    • ถ้าไม่ใช่ใน c1 แล้ว
      • ใส่ n, c2[n] ครั้งลงใน res
    • มิฉะนั้นเมื่อ n ไม่อยู่ใน c2 แล้ว
      • ใส่ n, c1[n] ครั้งลงใน res
    • มิฉะนั้น
      • ถ้า c1[n] ไม่เหมือนกับ c2[n] แล้ว
        • ใส่ n, |c1[n]- c2[n]| ครั้งเป็นความละเอียด
  • ผลตอบแทน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

from collections import Counter

def solve(nums1, nums2):
   c1 = Counter(nums1)
   c2 = Counter(nums2)
   all_nums = set(nums1) | set(nums2)
   res = []
   for n in all_nums:
      if n not in c1:
         res = res + [n]*c2[n]
      elif n not in c2:
         res = res + [n]*c1[n]
      else:
         if c1[n] != c2[n]:
            res = res + [n]*abs(c1[n]- c2[n])
   return res

nums1 = [4,5,8,8,6,9]
nums2 = [3,4,4,8,8,8,6,9,5,8]
print(solve(nums1, nums2))

อินพุต

[4,5,8,8,6,9], [3,4,4,8,8,8,6,9,5,8]

ผลลัพธ์

[3, 4, 8, 8]