Python程式使字元頻率相等


Python包含許多內建函式,旨在執行各種操作,包括字串操作、陣列分析、代數推理等。Python中的字串是一種資料型別,其中字元按順序排列。這些字元被索引以獲取序列中的特定位置,我們可以藉助這些索引值啟動基本的字串操作。本文將詳細介紹類似的基於字串的操作,我們將修改輸入字串以**使字元頻率相等**。

理解問題

我們的任務是以每個字元具有相同頻率或出現次數的方式修改字串。在一個字串中,每個字元可能具有不同的頻率,因此應相應地進行調整。讓我們藉助一個示例來理解這一點。

輸入輸出場景

讓我們考慮一個字串:

Input: "thisisateststring"

這裡,出現次數最多的字元是“**t**”,頻率為“**4**”。我們必須以每個來自原始字串的字元都具有“**4**”的頻率的方式來操作字串。因此,輸出將是:

Output: thisisateststringhhhiaaaeeerrrnnnggg

既然我們已經瞭解了問題,讓我們討論一些有效的解決方案。

使用迴圈(迭代)和count()

我們將執行一個函式並獲取一個輸入字串。我們將遍歷此字串,並藉助“**count()**”方法計算每個字母的頻率。

**count()**方法返回一個整數值。我們將透過建立一個檢查當前計數的條件來獲得最大字元計數值和出現次數最多的字母。一旦我們獲得了這些值,我們將使用另一個迭代來遍歷原始字串並隔離計數不等於**最大計數值**的那些字母。

這些隔離的字母將被附加到一個新字串中,以便每個字母共享相同的頻率。透過這種方式,將建立一個具有**相等字元頻率**的新字串。

示例

以下是使字元頻率相等的示例:

def INP_str(str):
   print(f"The original string is {str}")
   max_count = 0
   max_letter = ''

   for x in str:
      count = str.count(x)
      if count > max_count:
         max_count = count
         max_letter = x

   print(f"The maximum occurring letter is {max_letter}")
   print(f"The maximum frequency is {max_count}")

   # matching the frequencies 
   newSTR = str
   for i in str:
      if newSTR.count(i) != max_count:
         newSTR += i * (max_count - str.count(i))

   print(f"New string with equal character frequency:{newSTR}")

INP_str("thisisateststring")

輸出

The original string is thisisateststring
The maximum occurring letter is t
The maximum frequency is 4
New string with equal character frequency:thisisateststringhhhiaaaeeerrrnnnggg

使用Collections模組中的Counter()

這種方法依賴於找出最大字元計數和出現次數最多的字母的相同概念。不同之處在於隔離這些引數的技術。我們將使用“**Counter**”類例項來計算可雜湊物件(在本例中為字串)並將其儲存為鍵值對的形式。這裡,唯一字元儲存為**鍵**,它們的頻率儲存為字典**值**。

這種方法允許我們根據字元計數執行更高階的操作。一旦我們獲得了最大頻率,我們將遵循相同的附加不相等字母的過程。

示例

以下是一個示例:

from collections import Counter

def INPstr(input_str):
   refStr = Counter(input_str)
   max_count = 0
   max_letter = ""

   for char, count in refStr.items():
      if count > max_count:
         max_count = count
         max_letter = char

   print(f"The maximum occurring letter is {max_letter}")
   print(f"The maximum frequency is {max_count}")

   newSTR = input_str
   for i in input_str:
      if newSTR.count(i) != max_count:
         newSTR += i * (max_count - input_str.count(i))

   print(f"New string with equal character frequency:{newSTR}")


INPstr("thisisateststring")

輸出

The maximum occurring letter is t
The maximum frequency is 4
New string with equal character frequency:thisisateststringhhhiaaaeeerrrnnnggg

附加邏輯

字母不應超過最大頻率值。我們透過實現一個條件來保護此邏輯,該條件檢查每個字母的計數,然後僅附加頻率與最大頻率不匹配的那些字母。每個字元都乘以最大頻率值與該字元的當前計數之間的差值,然後附加到原始字串中。

結論

在本文的整個過程中,我們討論了使字串中**字元頻率相等**的不同解決方案。在第一個解決方案中,我們使用了“**count()**”方法以及迭代。第二種方法在核心技術上沒有太大偏差,因為它使用了“**Counter()**”方法以及迭代。我們還討論了維護頻率均衡邏輯的附加技術。

更新於: 2023年7月12日

75 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告