Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm số còn thiếu từ hai danh sách số bằng Python

Giả sử chúng ta có hai danh sách các số là nums1 và nums2. Có một số yếu tố không nhất thiết phải là duy nhất. Nhưng hai danh sách này thực sự đại diện cho các hoán vị khác nhau của cùng một bộ số. Tuy nhiên, một số trong số chúng bị mất tích. Chúng ta phải tìm số còn thiếu trong hai danh sách này và in ra tất cả.

Vì vậy, nếu đầu vào giống như nums1 =[4,5,8,8,6,9] nums2 =[3,4,4,8,8,8,6,9,5,8], thì đầu ra sẽ be [3,4,8,8] bởi vì chúng ta có thể thấy 3 không có trong nums1, nhưng nó nằm trong nums2, vì vậy nó bị thiếu. 4 hiện diện trong cả hai nhưng trong nums2 có hai 4 nhưng trong nums1 chỉ có một, vì vậy một 4 bị thiếu. Tương tự như vậy nums2 có bốn số 8, nhưng trong nums1 chỉ có 2, do đó, thiếu hai.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • c1:=danh sách chứa tần số của từng phần tử có trong nums1
  • c2:=danh sách chứa tần số của từng phần tử có trong nums2
  • all_nums:=một tập hợp chứa tất cả các số phân biệt từ nums1 và nums2
  • res:=một danh sách mới
  • đối với mỗi n trong all_nums, thực hiện
    • nếu n không có trong c1, thì
      • chèn n, c2 [n] lần vào res
    • ngược lại khi n không có trong c2, thì
      • chèn n, c1 [n] lần vào res
    • nếu không,
      • nếu c1 [n] không giống với c2 [n], thì
        • chèn n, | c1 [n] - c2 [n] | lần vào res
  • trả lại res

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơ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))

Đầu vào

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

Đầu ra

[3, 4, 8, 8]