模式辨識是一個重要的程式設計概念。它允許我們檢索滿足特定條件或匹配特定序列的特定資料。這原理在語言和影像處理等各領域都有幫助。字串匹配幫助我們從大量資料中提取有意義的資訊。
在本文中,我們將討論從給定字串清單中提取網格匹配字串的類似概念。網格匹配的重點是提取等長的“相似”字串,我們來詳細討論這個問題。
主要概念是提取遵循特定模式的相似字串。網格字串包含遺失的字符,並且應該提取與網格的隱藏模式匹配的那些字串。讓我們透過一個例子來理解這一點 -
Input: lis1 = ["Suresh", "Ramesh", "Ravi", "Raghav"] mesh = "___e_h"
網格包含字母「e」和「h」以及一些形成圖案的缺失字元。我們必須從清單中提取與網格模式相符的字串。
Output: ['Suresh', 'Ramesh']
顯然,單字「Suresh」和「Ramesh」與網格圖案相符。現在我們已經理解了問題陳述,讓我們討論一些解決方案。
傳遞字串清單和網格圖案後,我們將建立一個空列表來儲存提取的字串。我們將使用“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 函數建立一個新清單。過濾器函數將過濾掉不匹配的字串,並在其中定義一個 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中文網其他相關文章!