Python程序检查近似字符串
Python中的字符串是用于表示文本数据的字符序列,用引号括起来。检查近似字符串涉及比较和衡量它们的相似性或差异性,从而可以使用莱文斯坦距离或模糊匹配算法等技术执行拼写检查和近似字符串匹配等任务。
在本文中,我们将学习一个Python程序来检查近似字符串。
演示
假设我们已经获取了一个**输入字符串**
输入
Input string 1: aazmdaa Input string 2: aqqaccd k: 2
输出
Checking whether both strings are similar: True
在这个例子中,'a'在字符串1中出现4次,在字符串2中出现2次,4 – 2 = 2,在范围内,类似地,所有字符都在范围内,因此为真。
使用的方法
以下是完成此任务的各种方法
使用for循环、ascii_lowecase、字典推导式和abs()函数
使用Counter()和max()函数
使用for循环、ascii_lowecase、字典推导式和abs()函数
在这种方法中,我们将学习如何使用简单的for循环、ascii_lowecase、字典推导式和abs()函数来检查相似字符串。
字典推导式语法
{key_expression: value_expression for item in iterable}
字典推导式是Python中一种紧凑且简洁的方法,用于通过迭代可迭代对象并根据表达式定义键值对来创建字典,从而实现高效且易读的代码。
abs()函数语法
abs(number)
Python中的abs()函数返回数字的绝对值,即不考虑其符号的数值。它对于获取给定数字的大小或到零的距离很有用。
算法(步骤)
以下是执行所需任务应遵循的算法/步骤
使用import关键字从string模块导入**ascii_lowercase**。
创建一个函数**findFrequency()**,该函数通过接受输入字符串作为参数来返回字符串字符的频率。
获取一个字典,并用所有小写字母作为键,值为0填充它。
使用**for循环**遍历输入字符串。
将当前字符的频率增加1。
返回字符的频率。
创建一个变量来存储**输入字符串1**。
创建另一个变量来存储**输入字符串2**。
打印两个输入字符串。
创建另一个变量来存储**输入k**值
调用上述findFrequency()函数,通过传递输入字符串作为参数来获取输入字符串1的字符频率。
同样,获取输入字符串2的字符频率。
将结果初始化为**True**。
使用**for循环**遍历小写字母。
使用**if条件**语句检查两个字符串的当前字符频率的绝对差是否大于k,并使用**abs()**函数(返回数字的绝对值)。
如果条件为**true**,则将结果更新为**False**。
中断循环。
打印结果。
示例
以下程序使用for循环、ascii_lowecase、字典推导式和abs()函数返回给定字符串是否近似相同。
# importing ascii_lowercase from the string module from string import ascii_lowercase # creating a function that returns the frequency of characters of # of string by accepting input string as an argument def findFrequency(inputString): # Take a dictionary and filling with all lowercase alphabets as keys # With values as 0 frequency = {c: 0 for c in ascii_lowercase} # Traversing in the given string for c in inputString: # Incrementing the character frequency by 1 frequency[c] += 1 # returning the frequency of characters return frequency # input string 1 inputString_1 = 'aazmdaa' # input string 2 inputString_2 = "aqqaccd" # printing the input strings print("Input string 1: ", inputString_1) print("Input string 2: ", inputString_2) # input K value K = 2 # getting the frequency of characters of input string 1 # by calling the above findFrequency() function stringFrequency1 = findFrequency(inputString_1) # getting the frequency of characters of input string 2 stringFrequency2 = findFrequency(inputString_2) # Initializing the result as True result = True # traversing through all the lowercase characters for c in ascii_lowercase: # checking whether the absolute difference # of frequency of current characters of both strings is greater than k if abs(stringFrequency1[c] - stringFrequency2[c]) > K: # updating False to the result if the condition is true result = False # break the loop break # printing the result print("Checking whether both strings are similar: ", result)
输出
执行上述程序后,将生成以下输出
Input string 1: aazmdaa Input string 2: aqqaccd Checking whether both strings are similar: True
使用Counter()和max()函数
在这种方法中,我们将使用Counter和max函数的组合来检查与给定字符串几乎相似的字符串。
**Counter()**函数:一个子类,用于计算可哈希对象。它在被调用/调用时隐式地创建可迭代对象的哈希表。
counter_object = Counter(iterable)
算法(步骤)
以下是执行所需任务应遵循的算法/步骤
使用import关键字从collections模块导入**Counter**函数。
创建另一个变量来存储**输入k**值
使用**lower()**函数(将字符串中的所有大写字符转换为小写字符)将输入字符串1转换为小写,然后使用**Counter()**函数获取输入字符串1的字符频率。
以同样的方式,通过首先将其转换为小写来获取输入字符串2的字符频率。
将结果初始化为**True**。
使用if条件语句检查字符串是否相似。
**max()**方法(返回可迭代对象中值最高的项目/最大数字)
如果条件为**true**,则将结果更新为**False**。
打印结果。
示例
以下程序使用counter()、max()函数返回给定字符串是否近似相同。
# importing Counter from the collections module from collections import Counter # input string 1 inputString_1 = 'aazmdaa' # input string 2 inputString_2 = "aqqaccd" # printing the input strings print("Input string 1: ", inputString_1) print("Input string 2: ", inputString_2) # input K value K = 2 # convertig the input string 1 into lowercase and then # getting the frequency of characters of input string 1 strFrequency_1 = Counter(inputString_1.lower()) # convertig the input string 2 into lowercase and then # getting the frequency of characters of input string 2 strFrequency_2 = Counter(inputString_2.lower()) # Initializing the result as True result = True # Checking whether the strings are similar or not if(max((strFrequency_1 - strFrequency_2).values()) > K or max((strFrequency_2 - strFrequency_1).values()) > K): # updating False to the result if the condition is true result = False # printing the result print("Checking whether both strings are similar: ", result)
输出
执行上述程序后,将生成以下输出
Input string 1: aazmdaa Input string 2: aqqaccd Checking whether both strings are similar: True
结论
在本文中,我们学习了两种不同的方法来检查近似字符串。我们学习了如何遍历小写字母。使用字典(散列)和counter()函数,我们学习了如何计算给定字符串中每个字符的频率。