使用 Python 查詢陣列中出現頻率最低的元素


在這篇文章中,我們將學習獲取陣列中出現頻率最低的元素的 Python 程式。

使用的方法

以下是完成此任務的各種方法:

  • 使用 sort() 函式(樸素方法)

  • 使用雜湊

  • 使用 Counter() 函式

方法 1:使用 sort() 函式(樸素方法)

執行兩個迴圈是一個簡單的解決方法。外迴圈逐個選擇每個元素。內迴圈計算所選元素的頻率,並將其與迄今為止達到的最小值進行比較。此解決方案的時間複雜度為 O(n^2)

排序是一個更好的解決方案。首先對陣列進行排序,然後線性遍歷它,我們就可以找到出現頻率最低的元素,如下面的程式碼所示。

示例

以下程式使用 sort() 函式返回輸入陣列/列表中出現頻率最低的元素:

# creating a function for returning the least frequent element
def leastFrequencyElement(inputList, listLength):
   # sorting the given input list
   inputList.sort()
   # Setting the minimum frequency(minimum count) as length of list + 1
   minimumCount = listLength + 1
   resultElement = -1
   # Variable to count the frequency
   currentCount = 1
   # Looping from 1st index to the length of the list
   for k in range(1, listLength):
      # Check if the previous element is equal to the current element
      if (inputList[k] == inputList[k - 1]):
         #Increase the frequency of the current element by 1
            currentCount = currentCount + 1
      else:
         # Check if the current Count is less than the minimum Count
            if (currentCount < minimumCount):
               #If it is true then set the minimum count as current Count value
                  minimumCount = currentCount
                  # Store this previous element as the least frequent element
                  resultElement = inputList[k - 1]
            # Resetting the current Count as 1
            currentCount = 1
   # checking whether the last element is less frequent
      if (currentCount < minimumCount):
         minimumCount = currentCount
         resultElement = inputList[listLength - 1]
   # returning the least frequent element
      return resultElement
# input list
inputList = [6, 5, 5, 4, 4, 2, 2, 2, 1, 1]
print("Given List is:", inputList)
# getting list length
listLength = len(inputList)
# calling the leastFrequencyElement function by passing
# input list and list length as arguments
print("Least frequent element in the input list is:")
print(leastFrequencyElement(inputList, listLength))

輸出

執行上述程式將生成以下輸出:

Given List is: [6, 5, 5, 4, 4, 2, 2, 2, 1, 1]
Least frequent element in the input list is:
6

方法 2:使用雜湊

應用雜湊是一個有效的解決方案。在此方法中,我們建立一個雜湊表並存儲元素及其頻率計數作為鍵值對。然後,我們遍歷雜湊表並列印具有最小值的鍵。

示例

以下程式使用雜湊返回輸入陣列/列表中出現頻率最低的元素:

# creating a function for returning the least frequent element
# by accepting the input list and input list length as arguments
def leastFrequencyElement(inputList, listLength):
   # Take a dictionary as a hash table
   HashTable = dict()
   # Loop in the given list
   for k in range(listLength):
      # Check if the list element in the hashtable
         if inputList[k] in HashTable.keys():
            # If it is present then increase the frequency by 1
               HashTable[inputList[k]] += 1
         else:
            # Else create a new key with the frequency as 1
               HashTable[inputList[k]] = 1
   #  Setting the minimum frequency(minimumCount) as length of list + 1
   minimumCount = listLength + 1
   resultElement = -1
   # Iterating the hashtable(dictionary)
   for k in HashTable:
      # Check if the minimum count is greater or equal to the frequency of the key
         if (minimumCount >= HashTable[k]):
            #If it is true then this key will be the current least frequent element
               resultElement = k
            # Set the minimum count as the current key frequency value
               minimumCount = HashTable[k]

   # returning the least frequent element
   return resultElement
# input list
inputList = [3, 10, 3, 1, 5, 5, 4, 4, 2, 2, 2, 1, 1]
# getting list length
listLength = len(inputList)
print("Given List is:", inputList)
print("Least frequent element in the input list is:")
# calling the leastFrequencyElement function by passing
# input list and list length as arguments
print(leastFrequencyElement(inputList, listLength))

輸出

執行上述程式將生成以下輸出:

Given List is: [3, 10, 3, 1, 5, 5, 4, 4, 2, 2, 2, 1, 1]
Least frequent element in the input list is:
10

方法 3:使用 Counter() 函式

Counter() 函式(將單詞的頻率作為鍵值對返回)

示例

以下程式使用 Counter() 函式返回輸入陣列/列表中出現頻率最低的元素:

# importing Counter from the collections module
from collections import Counter
# creating a function for returning the least frequent element
# by accepting the input list and input list length as arguments
def leastFrequencyElement(inputList, listLength):
   # getting the frequency of all elements of a list
   hashTable = Counter(inputList)
   # Setting the minimum frequency(minimumCount) as length of list + 1
   minimumCount = listLength + 1
   # Variable to store the resultant least frequent element
   resultElement = -1
   # iterating the hash table
   for k in hashTable:
         # Check if the minimum count is greater or equal to the frequency of the key
            if (minimumCount >= hashTable[k]):
               # If it is true then this key will be the current least frequent element
                  resultElement = k
            # Set the minimum count as the current key frequency value
            minimumCount = hashTable[k]
# returning the least frequent element
   return resultElement
# input list
inputList = [3, 10, 3, 1, 5, 5, 4, 4, 2, 2, 2, 1, 1]
# getting list length
listLength = len(inputList)
print("The Given List is:", inputList)
print("Least frequent element in the input list is:")
# calling the leastFrequencyElement function by passing
# input list and list length as arguments
print(leastFrequencyElement(inputList, listLength))

輸出

執行上述程式將生成以下輸出:

The Given List is: [3, 10, 3, 1, 5, 5, 4, 4, 2, 2, 2, 1, 1]
Least frequent element in the input list is:
10

結論

在本文中,我們學習瞭如何使用三種不同的方法在給定列表中查找出現頻率最低的元素。我們還學習瞭如何在 Python 中執行雜湊,我們可以使用它來獲取所有唯一元素,在 O(1) 時間內搜尋等等。我們學習瞭如何使用 Counter() 函式執行雜湊。

更新於:2023年1月23日

824 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告