Python - 第k個有效字串


字串是任何程式語言中重要的資料型別。它們是字元序列。查詢第k個有效字串是一種程式設計技巧,我們需要從中找到第k個元素,該元素是一個有效字串。在本文中,我們將瞭解幾種方法,例如蠻力法、使用列表推導和列舉物件、filter方法等。我們還將瞭解如何使用Pandas庫來處理相同的問題。

理解問題陳述

我們將有一個列表和k值作為輸入

list: ["", "orange", "75", "apple"]
k: 2

現在我們的任務是找到第k個有效字串。“”不是有效字串(未定義),“orange”是有效字串,“75”包含數字,“apple”是有效字串。因此,第k個(第2個)有效字串是“apple”。

Output: apple

使用迭代

查詢第k個有效字串最簡單的方法之一是蠻力法。在這種方法中,我們可以簡單地迭代元素列表,並在每次迭代中檢查是否存在有效字串。我們可以跟蹤有效字串的數量。如果在迭代過程中我們達到第k個有效字串,我們可以中斷迴圈。

示例

在下面的程式碼中,我們首先建立了一個名為find_kth_valid_string的函式,該函式將字串和k值作為引數。接下來,我們初始化一個名為count的變數來跟蹤列表中有效字串的數量。接下來,我們使用for迴圈迭代列表,對於每次迭代,如果元素是有效字串,我們就遞增變數'count'的值。我們設定了一個條件,如果變數-'count'的值達到'k',則需要中斷迴圈。

def find_kth_valid_string(strings, k):
    count = 0
    for string in strings:
        if is_valid(string):
            count += 1
            if count == k:
                return string
    return None
def is_valid(string):
    return string.islower() and isinstance(string, str)
strings = ["", "def", "123", "xyz"]
k = 2
print(find_kth_valid_string(strings=strings, k=k))

輸出

xyz

使用Filter方法

Filter方法在Python程式設計師中很流行,它使用某些條件從任何可迭代資料型別中選擇元素。當我們只需要應用幾個條件時,它非常方便。通常我們使用lambda函式來使程式碼更簡潔。它接受兩個引數,即函式名稱和可迭代物件。

filter(function, iterable object)

函式是應用於可迭代物件所有元素的函式的名稱。可迭代物件是應該應用函式的可迭代物件。它將返回一個掩碼物件,在每個索引處包含布林值True或False。

示例

在下面的示例中,我們使用了filter方法,其中我們傳遞了兩個引數,即“is_valid”和字串。is_valid函式是一個自定義函式,它檢查元素是否為字串資料型別。我們檢查有效字串的長度是否小於'k'。如果為True,則我們透過索引返回第k個有效字串。

def find_kth_valid_string(strings, k):
    valid_strings = list(filter(is_valid, strings))
    if k <= len(valid_strings):
        return valid_strings[k - 1]
    else:
        return None

def is_valid(string):
    return isinstance(string, str) and string.islower() 

strings = ["", "","pqr", "123", "xyz", "gh"]
k = 3
print(f"The kth valid String in the list is: {find_kth_valid_string(strings=strings, k=k)}")

輸出

The kth valid String in the list is: gh

使用列表推導和列舉物件

列表推導是一種使用某些表示式和語句將元素附加到列表的技術。當我們想將多個簡短表示式組合成一行時,這非常方便。

另一方面,enumerate是Python的內建函式,它返回一個列舉物件,其中包含可迭代物件的索引和元素。列舉物件的每個專案都是一個元組,包含可迭代物件的索引和元素。

示例

在下面的示例中,我們使用列表推導來建立有效字串。我們建立了一個名為is_valid的自定義函式,它接受字串並返回它是否是有效字串。我們使用該函式與列表推導來檢查列表的元素是否為有效字串。如果有效字串列表的長度大於k,我們返回第k個有效字串。

def find_kth_valid_string(strings, k):
    valid_strings = [string for _, string in enumerate(strings) if is_valid(string)]
    if k <= len(valid_strings):
        return valid_strings[k - 1]
    else:
        return None

def is_valid(string):
    return isinstance(string, str) and string.islower() 

strings = ["", "", "pqr", "123", "xyz", "gh","word", "hello"]
k = 4
print(f"The kth valid String in the list is: {find_kth_valid_string(strings=strings, k=k)}")

輸出

The kth valid String in the list is: word

使用Pandas庫的方法

Pandas是Python中流行的資料處理和分析庫。Pandas處理資料框。我們可以對資料框應用許多函式和方法。其中一種重要的method是'apply'方法,它將函式應用於資料框的所有元素。對於我們的用例,我們可以建立一個函式來檢查元素是否為有效字串,並將其應用於資料框的所有元素。

示例

在下面的程式碼中,我們匯入了pandas庫。接下來,我們使用Pandas的'DataFrame'函式從字串建立一個數據框。我們對資料框使用了apply方法來檢查DataFrame的元素是否為有效字串。接下來,我們使用'tolist()'方法將序列轉換為列表,如果存在,則返回第k個有效字串。

import pandas as pd

def find_kth_valid_string(strings, k):
    df = pd.DataFrame(strings, columns=['string'])
    df['valid'] = df['string'].apply(is_valid)
    valid_strings = df[df['valid']]['string'].tolist()
    return valid_strings[k - 1] if k <= len(valid_strings) else None

strings = ["", "", "pqr", "123", "xyz", "gh","word", "hello"]
k = 4
print(f"The kth valid String in the list is: {find_kth_valid_string(strings=strings, k=k)}")

輸出

The kth valid String in the list is: word

結論

在本文中,我們瞭解瞭如何在Python中查詢第k個有效字串。我們已經看到了簡單的迭代技術,例如蠻力演算法。為了提高程式碼的可讀性,我們使用了filter方法,該方法根據我們的自定義函式過濾所有有效的字串。其他庫(如Pandas)也為我們提供了各種方法來執行相同的操作。

更新於:2023年7月18日

83 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.