Python - 從給定字元中生成長度為 K 的組合
從給定字元中生成長度為 K 的組合是指,我們可以使用給定字元建立的、長度正好為 K 的字元組合。在本文中,我們將探討實現這一目標的幾種方法,例如遞迴、map 和 lambda 函式、itertools 庫等。雖然遞迴和 lambda 函式是自定義函式,但 itertools 提供了生成組合的內建方法。
使用遞迴
遞迴是傳統的程式設計技巧之一。在這種技術中,我們嘗試將一個大問題分解成更小的子問題,我們的目標是解決這些子問題,最終解決大問題。遞迴方法有一個基本情況;我們需要執行遞迴,直到我們到達遞迴的基本情況。
示例
在下面的示例中,我們建立了一個名為 generate_combinations 的函式,它接收字元和所需序列的長度作為引數。在函式內部,我們首先建立了一個空列表來儲存我們的答案。接下來,在該函式中,我們建立了另一個名為 generate_helper 的函式,它將附加長度等於 k 的組合,這些組合是由我們傳遞給函式的字元生成的。我們返回了該列表。為了測試該函式,我們建立了一個名為 characters 的字元列表,呼叫了 generate_combinations 函式,並列印了結果。
def generate_combinations(characters, k):
combinations_list = []
def generate_helper(current_combination, remaining_characters):
if len(current_combination) == k:
combinations_list.append(current_combination)
return
for char in remaining_characters:
generate_helper(current_combination + char, remaining_characters)
generate_helper('', characters)
return combinations_list
characters = ['A', 'B', 'C', 'D', 'E']
k = 2
result = generate_combinations(characters, k)
print(result)
輸出
['AA', 'AB', 'AC', 'AD', 'AE', 'BA', 'BB', 'BC', 'BD', 'BE', 'CA', 'CB', 'CC', 'CD', 'CE', 'DA', 'DB', 'DC', 'DD', 'DE', 'EA', 'EB', 'EC', 'ED', 'EE']
使用 itertools 庫生成長度為 K 的組合
Python 中的 itertools 庫是一個強大的工具,它提供了一些可以有效地組合可迭代物件的函式。該庫預設可用;因此,我們不需要單獨安裝該庫。使用該庫的優點在於它記憶體效率高。因此,在處理大型資料時,如果記憶體效率和效能很重要,我們應該使用該庫。
示例
在下面的程式碼中,我們首先從 Python 的 itertools 庫中匯入了 product 模組。接下來,我們建立了一個名為 generate_combinations 的函式,它接收字元序列和我們要構建的序列的長度作為引數。在這個函式中,我們使用 product 方法建立了一個可能的組合列表。由於組合是元組,因此我們使用了字串的 join 方法從列表中提取字串。
from itertools import product
def generate_combinations(characters, k):
combinations_list = list(product(characters, repeat=k))
combinations_strings = [''.join(comb) for comb in combinations_list]
return combinations_strings
characters = ['A','B','C','D','E']
k = 2
result = generate_combinations(characters, k)
print(result)
輸出
['AA', 'AB', 'AC', 'AD', 'AE', 'BA', 'BB', 'BC', 'BD', 'BE', 'CA', 'CB', 'CC', 'CD', 'CE', 'DA', 'DB', 'DC', 'DD', 'DE', 'EA', 'EB', 'EC', 'ED', 'EE']
使用 Map Lambda 函式
lambda 函式是定義函式的一種便捷方式,無需定義函式的名稱。當我們想要一個快速的操作,但確定它只會在程式中使用一次時,該函式很有用。因此,當您確定不需要程式碼的可重用性並且邏輯足夠小時,建立 lambda 函式是一個好習慣。
另一方面,Map 將任何函式應用於可迭代物件的所有元素。它接受兩個引數:函式的名稱和可迭代物件。對於我們的用例,我們可以使用 product 方法生成所有組合,並使用 map 和 lambda 函式從組合中建立一個字串。
示例
在下面的程式碼中,我們使用了 itertools 模組的“product”方法。我們建立了 generate_combinations 函式,它接收字元列表和長度 k 作為引數。在函式內部,我們使用 product 方法生成所有組合。我們將序列和輸出序列的 k 長度作為引數傳遞。接下來,我們結合 map 和 lambda 函式將它們轉換為字串序列。最後,我們返回生成的列表。
from itertools import product
def generate_combinations(characters, k):
combinations_list = list(product(characters, repeat=k))
combinations_strings = list(map(lambda comb: ''.join(comb), combinations_list))
return combinations_strings
characters = ['P','Q','R','S','T']
k = 2
result = generate_combinations(characters, k)
print(result)
輸出
['PP', 'PQ', 'PR', 'PS', 'PT', 'QP', 'QQ', 'QR', 'QS', 'QT', 'RP', 'RQ', 'RR', 'RS', 'RT', 'SP', 'SQ', 'SR', 'SS', 'ST', 'TP', 'TQ', 'TR', 'TS', 'TT']
結論
在本文中,我們瞭解瞭如何從給定字元中生成長度為 K 的組合。我們可以建立自己的邏輯來執行相同的操作。或者,Python 還為我們提供了多個庫來實現此目的。我們可以使用遞迴技術,其目標是解決問題的較小子集。接下來,我們可以使用 itertools 庫的“product”方法。為了方便起見,我們還可以將 lambda 函式和 map 方法與 product 方法結合使用。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP