如何使用 Python 根據第 K 個字元對字串進行分組?


在 Python 中,我們可以使用多種方法根據第 K 個字元對字串進行分組,例如使用字典、利用 itertools 模組中的 groupby() 函式以及使用 collections 模組中的 defaultdict。根據第 K 個字元對字串進行分組在操作和執行字串的複雜運算時非常有用。在本文中,我們將探討使用各種技術根據第 K 個索引元素對元組進行分組的不同方法,並演示其實現。

方法 1:使用字典

根據第 K 個字元對字串進行分組的一種方法是使用字典。我們可以遍歷字串列表,從每個字串中提取第 K 個字元,並將它們儲存為字典的鍵。與每個鍵關聯的值將是共享相同第 K 個字元的字串列表。

語法

list_name.append(element)

這裡,append() 函式以一個元素作為引數,並將其新增到列表的末尾。List_name 是應用 append 方法的列表。

示例

在下面的示例中,我們有一個字串列表:['apple', 'banana', 'avocado', 'cherry', 'orange']。我們希望根據它們的第二個字元(第 K 個字元)對這些字串進行分組,因此我們將 k 設定為 2。函式 group_strings_on_kth_char() 遍歷每個字串並提取第 K 個字元。如果該字元還不是字典 grouped_strings 中的鍵,則會新增它,並使用空列表作為初始值。然後,根據其第 K 個字元將字串追加到相應的列表中。

def group_strings_on_kth_char(strings, k):
    grouped_strings = {}
    for string in strings:
        key = string[k-1]  # Adjusting for zero-based indexing
        if key not in grouped_strings:
            grouped_strings[key] = []
        grouped_strings[key].append(string)
    return grouped_strings

strings = ['apple', 'banana', 'avocado', 'cherry', 'orange', 'mango']
k = 2
result = group_strings_on_kth_char(strings, k)
print(result)

輸出

{'p': ['apple'], 'a': ['banana', 'mango'], 'v': ['avocado'], 'h': ['cherry'], 'r': ['orange']}

方法 2:使用 Defaultdict

使用 Python 的 collections 模組中的 defaultdict 是使用常規字典的另一種方法。這種資料結構在第一次訪問時會自動用預設值初始化新鍵。在我們的例子中,我們可以將預設值設定為空列表並簡化程式碼。

語法

groups = defaultdict(list)
groups[item].append(item)

這裡,defaultdict() 函式建立一個名為 group 的物件,其中包含一個空列表。groups(item).append(item) 透過從 group 中選擇一個特定的列表將元素追加到 group 列表。

示例

在下面的示例中,我們從 collections 模組匯入 defaultdict 類。其餘程式碼與方法 1 類似,不同之處在於我們建立了一個名為 grouped_strings 的 defaultdict 物件,其值型別設定為列表。這消除了在遇到新鍵時顯式檢查以建立空列表的需要。

from collections import defaultdict

def group_strings_on_kth_char(strings, k):
    grouped_strings = defaultdict(list)
    for string in strings:
        key = string[k-1]  # Adjusting for zero-based indexing
        grouped_strings[key].append(string)
    return grouped_strings

strings = ['apple', 'banana', 'avocado', 'cherry', 'orange', 'mango']
k = 2
result = group_strings_on_kth_char(strings, k)
print(result)

輸出

defaultdict(<class 'list'>, {'p': ['apple'], 'a': ['banana', 'mango'], 'v': ['avocado'], 'h': ['cherry'], 'r': ['orange']})

方法 3:使用 itertools.groupby

itertools.groupby 函式是根據鍵函式對元素進行分組的強大工具。它的工作原理是將具有相同鍵值的連續元素分組。在我們的例子中,我們可以定義一個鍵函式來提取每個字串的第 K 個字元。

語法

list_name.append(element)

這裡,append() 函式是一個列表方法,用於將元素新增到列表名稱的末尾。它透過將指定的元素作為新項新增到列表中來修改原始列表。

itertools.groupby(iterable, key=None)

這裡,iterable 是任何元素集合,key 是一個可選引數,它是一個函式,指定分組標準。它返回一個迭代器,該迭代器生成包含來自 iterable 的連續鍵和組的元組。

示例

在下面的示例中,我們匯入 itertools 模組並使用 groupby 函式。在應用 groupby 之前,我們使用 lambda 函式根據它們的第 K 個字元對字串進行排序。然後,groupby 函式根據第 K 個字元對排序後的字串進行分組。我們遍歷結果組,將鍵(第 K 個字元)儲存為字典鍵,並將組迭代器轉換為列表。

import itertools

import itertools

def group_strings_on_kth_char(strings, k):
    strings.sort(key=lambda x: x[k-1])  # Sorting based on Kth character
    grouped_strings = {}
    for key, group in itertools.groupby(strings, key=lambda x: x[k-1]):
        grouped_strings[key] = list(group)
    return grouped_strings

strings = ['apple', 'banana', 'avocado', 'cherry', 'orange', 'mango']
k = 2
result = group_strings_on_kth_char(strings, k)
print(result)

輸出

{'a': ['banana', 'mango'], 'h': ['cherry'], 'p': ['apple'], 'r': ['orange'], 'v': ['avocado']}

結論

在本文中,我們瞭解瞭如何使用 Python 中的不同方法根據第 K 個字元對字串進行分組。我們學習瞭如何使用字典、defaultdict 和 itertools.groupby 函式來完成此任務。每種方法都提供了一種簡潔有效的方式來對字串進行分組。我們可以根據問題的複雜性使用任何一種方法來解決。

更新於: 2023-07-18

202 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告
© . All rights reserved.