首頁 >後端開發 >Python教學 >Python程式提取網格匹配字串

Python程式提取網格匹配字串

WBOY
WBOY轉載
2023-09-09 22:21:09874瀏覽

Python程式提取網格匹配字串

模式辨識是一個重要的程式設計概念。它允許我們檢索滿足特定條件或匹配特定序列的特定資料。這原理在語言影像處理等各領域都有幫助。字串匹配幫助我們從大量資料中提取有意義的資訊。

在本文中,我們將討論從給定字串清單中提取網格匹配字串的類似概念。網格匹配的重點是提取等長的“相似”字串,我們來詳細討論這個問題。

理解問題

主要概念是提取遵循特定模式的相似字串。網格字串包含遺失的字符,並且應該提取與網格的隱藏模式匹配的那些字串。讓我們透過一個例子來理解這一點 -

輸入輸出場景

Input:
lis1 = ["Suresh", "Ramesh", "Ravi", "Raghav"]
mesh = "___e_h"

網格包含字母「e」和「h」以及一些形成圖案的缺失字元。我們必須從清單中提取與網格模式相符的字串。

Output: ['Suresh', 'Ramesh']

顯然,單字「Suresh」和「Ramesh」與網格圖案相符。現在我們已經理解了問題陳述,讓我們討論一些解決方案。

將迭代與 Zip() 一起使用

傳遞字串清單和網格圖案後,我們將建立一個空列表來儲存提取的字串。我們將使用“for”循環迭代每個字串,並在循環內建立一個條件來檢查當前“字串”(單字)的長度是否等於該字串的長度。網。

這允許我們選擇相關字串進行網格匹配。此條件還檢查網格中的字元是否為「下劃線」或是否與單字中的對應字元相符。

使用這兩個條件,我們將提取與網格模式相符的單字。如果字串及其字元都滿足條件,則將使用zip() 函數對「mesh」中的字元與「」中的字元進行迭代和配對詞」。該函數允許對兩種模式進行成對比較。

範例

以下是提取網格匹配字串的範例 –

lis1 = ["Suresh", "Ramesh", "Ravi", "Raghav"]
mesh = "___e_h"
lis2 = []
print(f"The original list is: {lis1}")

for words in lis1:
   if (len(words) == len(mesh)) and all((letter1 == "_") or (letter1 == letter2)
      for letter1, letter2 in zip(mesh, words)):
         lis2.append(words)

print(f"The new list is: {lis2}")

輸出

The original list is: ['Suresh', 'Ramesh', 'Ravi', 'Raghav']
The new list is: ['Suresh', 'Ramesh']

使用列表理解

在這種方法中,我們將使用列表理解技術來產生細緻而緊湊的程式碼。迭代的多行概念可以概括為幾行程式碼。

這種緊湊的表示增強了程式的可讀性。我們將使用相同的邏輯來建立條件並分離符合標準的值。 “for”和“if”循環都將應用於列表中。在 zip() 函數的幫助下對每個字元進行比較和配對。

範例

以下是一個範例 -

lis1 = ["Suresh", "Ramesh", "Ravi", "Raghav"]
mesh = "___e_h"
print(f"The original list is:{lis1}")

lis2 = [words for words in lis1 if (len(words) == len(mesh)) and all((letter1 == "_") or (letter1 == letter2)
           for letter1, letter2 in zip(mesh, words))]

print(f"The new list is: {lis2}")

輸出

The original list is:['Suresh', 'Ramesh', 'Ravi', 'Raghav']
The new list is: ['Suresh', 'Ramesh']

使用 Filter() Lambda() 函數

過濾功能可用於根據特定條件過濾值。提供網格圖案和字串清單後,我們將藉助 filter()lambda 函數建立一個新清單。過濾器函數將過濾掉不匹配的字串,並在其中定義一個 lambda 函數,用於檢查兩個模式的長度。

zip()函數將用於比較和配對字元。過濾條件將由 lambda 函數提供。

範例

以下是一個範例 -

lis1 = ["Suresh", "Ramesh", "Ravi", "Raghav"]
mesh = "___e_h"
print(f"The original list is:{lis1}")

lis2 = list(filter(lambda words: len(words) == len(mesh) and all((letter1 == "_") or (letter1 == letter2)
   for letter1, letter2 in zip(mesh, words)), lis1))
print(f"The new list is: {lis2}")

輸出

The original list is:['Suresh', 'Ramesh', 'Ravi', 'Raghav']
The new list is: ['Suresh', 'Ramesh']

有價值的見解

所有上述討論的解決方案都遵循一個核心原則:為了比較字串和網格圖案,它們的長度應該相等,即;字串和網格應該具有相同數量的字元。此外,如果底線的位置發生變化,模式識別也會發生變化。

結論

在本文中,我們討論了一些豐富且有效的解決方案來提取網格匹配字串。最初我們專注於理解網格匹配的概念,後來我們介紹了解決方案。我們應用了許多程式設計概念,包括「迭代」、「列表理解」、「filter()」和「lambda 函數 ” b>”來實現我們的目標。

以上是Python程式提取網格匹配字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除