Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 두 개의 숫자 목록에서 누락된 숫자를 찾는 프로그램

<시간/>

nums1과 nums2라는 두 개의 숫자 목록이 있다고 가정합니다. 반드시 고유하지 않은 몇 가지 요소가 있습니다. 그러나 이 두 목록은 실제로 동일한 숫자 집합의 서로 다른 순열을 나타냅니다. 그러나 그들 중 일부는 누락되었습니다. 이 두 목록에서 누락된 숫자를 찾아 모두 인쇄해야 합니다.

따라서 입력이 nums1 =[4,5,8,8,6,9] nums2 =[3,4,4,8,8,8,6,9,5,8]과 같으면 출력은 다음과 같습니다. nums1에는 3이 없지만 nums2에는 있으므로 [3,4,8,8]이 됩니다. 4는 둘 다에 있지만 nums2에는 두 개의 4가 있지만 nums1에는 하나만 있으므로 하나의 4가 없습니다. 마찬가지로 nums2에는 4개의 8이 있지만 nums1에는 2개만 있으므로 2개가 누락되었습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • c1 :=nums1에 있는 각 요소의 빈도를 포함하는 목록
  • c2 :=nums2에 있는 각 요소의 빈도를 포함하는 목록
  • all_nums :=nums1 및 nums2의 모든 고유 숫자를 포함하는 집합
  • res :=새 목록
  • all_nums의 각 n에 대해 다음을 수행합니다.
    • n이 c1에 없으면
      • res에 n, c2[n]번 삽입
    • 그렇지 않으면 n이 c2에 없으면
      • res에 n, c1[n]번 삽입
    • 그렇지 않으면
      • c1[n]이 c2[n]과 같지 않으면
        • n 삽입, |c1[n]- c2[n]| 시간을 res로
  • 반환 결과

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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]