Python - 分組連線至 K


分組連線至 K 指的是在滿足特定條件之前,連線組或序列內的元素。在 Python 中,我們可以使用多種方法來實現分組連線至 K,例如使用迴圈和累加器、使用 itertools.groupby() 以及使用正則表示式。在本文中,我們將使用和探索所有這些方法來實現分組連線至 K 或滿足特定條件。

方法 1:使用迴圈和累加器

此方法利用迴圈和累加器來對元素進行分組,直到遇到目標值 K。它遍歷列表,將元素累積到一個臨時組中,直到找到 K。一旦遇到 K,該組就會連線成一個字串並新增到結果列表中。最後,將組中任何剩餘的元素追加到結果列表中。

語法

list_name.append(element)

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

示例

在下面的示例中,函式 group_concatenate_till_k 接受一個列表 lst 和目標值 K。它初始化一個空列表 result 來儲存分組元素,以及一個空列表 group 來累積元素,直到遇到 K。迴圈遍歷列表中的每個專案。如果專案等於 K,則將 group 中的元素連線成字串並將其附加到 result,然後將 group 重置為空列表。如果專案不等於 K,則將其附加到 group。

最後,它將 group 中任何剩餘的元素附加到 result 並返回 result。

def group_concatenate_till_k(lst, K):
    result = []
    group = []
    for item in lst:
        if item == K:
            result.append(''.join(group))
            group = []
        else:
            group.append(item)
    result.append(''.join(group))
    return result

# Example usage
lst = ['a', 'b', 'c', '', 'd', 'e', '', '', 'f']
K = ''
output = group_concatenate_till_k(lst, K)
print(output)

輸出

['abc', 'de', 'f']

方法 2:使用 itertools.groupby()

在此方法中,itertools 模組中的 groupby 函式用於根據特定條件對連續元素進行分組。透過使用 lambda 函式指定條件,它將列表分成不包含 K 的組。每組中的元素連線成一個字串並新增到結果列表中。

語法

list_name.append(element)

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

itertools.groupby(iterable, key=None)

這裡,groupby() 方法接受一個可迭代物件作為輸入和一個可選的鍵函式。它返回一個迭代器,該迭代器生成包含來自可迭代物件的連續鍵和組的元組。鍵函式用於確定分組標準。

示例

在下面的示例中,函式 group_concatenate_till_k 接受一個列表 lst 和目標值 K。它使用 groupby 函式根據條件 lambda x: x != K 對列表中的連續元素進行分組。groupby 函式返回由鍵(條件結果)和對應組的迭代器組成的對。透過檢查鍵是否為 True,我們識別出不包含 K 的組,並將元素連線起來形成字串。然後將此字串附加到結果列表中。

from itertools import groupby

def group_concatenate_till_k(lst, K):
    result = []
    for key, group in groupby(lst, lambda x: x != K):
        if key:
            result.append(''.join(group))
    return result

# Example usage
lst = ['a', 'b', 'c', '', 'd', 'e', '', '', 'f']
K = ''
output = group_concatenate_till_k(lst, K)
print(output)

輸出

['abc', 'de', 'f']

方法 3:使用正則表示式

此方法涉及使用正則表示式根據目標值 K 將列表拆分為組。使用正則表示式函式構造一個模式,以確保 K 不在組的開頭。然後使用 re.split 函式根據此模式拆分連線的字串,從而得到所需的分組元素。

語法

result = re.split(pattern, string)

這裡,re 模組中的 re.split 函式接受兩個引數:pattern 和 string。pattern 是定義拆分標準的正則表示式,而 string 是要拆分的輸入字串。該函式返回根據指定的 pattern 進行拆分操作後得到的子字串列表。

示例

在下面的示例中,函式 group_concatenate_till_k 接受一個列表 lst 和目標值 K。它透過轉義 K 值並使用否定前瞻來構造正則表示式模式,以確保 K 不在組的開頭。然後使用 re.split 函式根據構造的模式拆分連線的字串。結果列表包含分組元素,將其作為輸出返回。

import re

def group_concatenate_till_k(lst, K):
    pattern = f"(?!^{re.escape(K)}){re.escape(K)}"
    result = re.split(pattern, ''.join(lst))
    return result

# Example usage
lst = ['a', 'b', 'c', '', 'd', 'e', '', '', 'f']
K = ''
output = group_concatenate_till_k(lst, K)
print(output)

輸出

['a', 'b', 'c', 'd', 'e', 'f', '']

結論

在本文中,我們討論瞭如何在滿足特定條件 K 之前對列表或序列的元素進行分組連線。我們探討了三種方法:使用迴圈和累加器、itertools.groupby() 和正則表示式。根據需求和偏好,可以選擇最適合其特定用例的方法。

更新於: 2023-07-18

70 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.