Python 提取网格匹配字符串程序

Python 提取网格匹配字符串程序

模式识别是一个重要的编程概念。它允许我们检索满足特定条件的特定数据,或匹配特定顺序的数据。这个原理在各个领域都很有帮助,包括 语言图像处理 。字符串匹配帮助我们从大量的数据中提取有意义的信息。

在本文中,我们将讨论从给定字符串列表中提取 网格匹配 字符串的类似概念。网格匹配侧重于提取“ 相似的 ”等长字符串,让我们详细讨论这个问题。

理解问题

主要概念是提取符合特定模式的相似字符串。网格字符串包含缺失字符,应该提取与网格的隐藏模式匹配的字符串。让我们通过一个示例来理解这个问题 –

输入输出场景

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

网格包含字母“ e ”和“ h ”,以及一些缺失的字符形成的模式。我们需要从列表中提取与网格模式匹配的字符串。

Output: ['Suresh', 'Ramesh']

显然,“Suresh”和“Ramesh”这两个词符合网格图案。现在我们已经理解了问题陈述,让我们讨论一些解决方案。

使用迭代和Zip()

在传递字符串列表和网格图案之后,我们将创建一个空列表来存储提取出的字符串。我们将使用“for”循环遍历每个字符串,在循环内部我们将建立一个条件,检查当前“string”(单词)的长度是否等于网格的长度。

这使我们能够选择与网格匹配的相关字符串。该条件还检查网格中的字符是否为“underscore”或与单词中的相应字符匹配。

使用这两个条件,我们将提取与网格图案匹配的词。如果字符串和它们的字符都满足条件,则将使用zip()函数来迭代并将“mesh”的字符与“words”的字符配对。这个函数允许两个模式之间进行逐对比较。

示例

以下是一个提取网格匹配字符串的示例:

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函数可以根据特定的条件过滤值。在提供网格模式和字符串列表之后,我们将使用filter()和lambda函数创建一个新列表。filter函数将过滤掉不符合条件的字符串,并在其中定义一个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函数”,以实现我们的目标。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程