Python教程-Python程序查找变位词
在本教程中,我们将学习如何检测给定的字符串是否是变位词。但首先我们应该熟悉变位词的概念。
什么是变位词?
变位词是一种情况,其中一个字符串或数字被重新排列,以使重新排列后的字符串或数字的每个字符都必须是另一个字符串或数字的一部分。换句话说,如果第二个字符串是第一个字符串的简单重新排列,则称字符串是另一个字符串的变位词。例如python和 yphton 是变位词;Java 和 avaJ 也是变位词。
在解决这个问题之前,让我们先理解问题的描述。
问题描述
- 从用户那里获取字符串输入并将它们存储在不同的变量中。
- 使用sort()方法将这两个字符串排序为列表。
- 检查这两个列表是否形成了变位词。
- 打印结果。
- 退出
程序
def anagramCheck2(str1,str2):
# Convert string into lists
list1 = list(str1)
list2 = list(str2)
# Sort the list value
list1.sort()
list2.sort()
position = 0
matches = True
while position < len(str1) and matches:
if list1[position]==list2[position]:
position = position + 1
else:
matches = False
return matches
print(anagramCheck2('python','ythonp'))
输出:
True
解释 -
在上面的代码中,我们声明了anagramCheck()方法,它接受两个字符串作为参数。这些字符串被转换为列表以进行排序。然后,我们定义了position变量,并将其赋值为零。在每次while循环的迭代中,将字符串长度与位置值进行比较。将两个列表的每个元素相互比较,并将位置值增加一。一旦位置值变大于字符串长度,循环将终止,并返回True;否则,它将返回False。
Python中的变位词程序示例
有几种技术和示例可用于在Python中查找变位词。以下是这些技术:
1. 计数器技术
在这个技术中,我们计算两个给定字符串中每个字符的数量。如果给定字符串的计数与另一个字符串相匹配,则相应的词是另一个词的变位词。
让我们了解以下示例。
示例 -
from collections import Counter, defaultdict
def checking_anagram(keywords):
agrms = defaultdict(list)
for i in keywords:
hist = tuple(Counter(i).items())
agrms[hist].append(i)
return list(agrms.values())
keywords = ("python","yphotn")
print(checking_anagram(keywords))
输出:
[['python'], ['yphotn']]
解释 -
在上面的代码中,我们导入了collections模块及其Counter和defaultdict方法,以检查字符串是否为变位词。我们定义了checking_anagram()方法,使用计数器函数计算并记录每个字符的数量。每个计数都被排序在一个列表中并保持在跟踪中。此过程对第一个字符串的所有字符执行,然后对第二个字符串执行。如果两个字符串的计数匹配,这意味着两个字符串都是变位词。
- 排序技术
在这个技术中,两个字符串都被排序,然后检查它们是否相互匹配。让我们了解以下示例。
示例 -
def Anogram_check(str1, str2):
# Strings are sorted and check whether both are matching or not
if(sorted(str1)== sorted(str2)):
print("Both strings are an Anagram.")
else:
print("Both strings are not an Anagram.")
string1 ="python"
string2 ="ythopn"
print( "String value1 : ", str1 )
print( "String value2 : ", str2 )
Anogram_check(string1, str2)
输出:
String value1 : python
String value2 : ythopn
Both strings are an Anagram.
解释 -
在上面的代码中,我们定义了checking_anagram()方法并传递了两个字符串。在checking_anagram()方法中,我们将字符串存储在特定的变量中。然后,我们对排序后的每个字符串进行了比较。如果字符串之间的比较匹配,那么给定的字符串就形成了变位词;否则,它们将被视为两个字符串都不是变位词。这种方法相对简单且有效。它将代码复杂性大大降低。
2. 反转变位词检查
我们可以如下应用这种技术。
示例 -
words_list = ["cat", "tac", "Play", "ay"]
anagrams = {}
for w in words_list:
reverse_word=w[::-1]
if reverse_word in words_list:
anagrams[w] = (words_list.pop(words_list.index(reverse_word)))
print(anagrams)
输出:
{'cat': 'tac'}
解释 -
在上面的代码中,我们使用这种技术来比较反转字符串中的变位词。在这里,我们形成了两个不同的字符串。这种技术类似于回文,我们将一个字符串反转并与其他字符串进行比较。如果它们匹配,字符串就形成了一个变位词;如果它们不匹配,它们将被视为不是变位词。
3. 位置验证技术
在这种方法中,通过位置级别比较以检查变位词。我们可以通过验证第一个字符串的位置字符与另一个字符串中的每个位置字符来实现这一点。如果第一个字符串与另一个字符串的相似匹配,就会声明它们是变位词。让我们了解以下示例。
示例 -
def checking_anagram(str1,str2):
chk_var = True
if len(str1) != len(str2):
chk_var = False
list1 = list(str2)
pos_string1 = 0
while pos_string1 < len(str1) and chk_var:
pos_string2 = 0
found = False
while pos_string2 < len(list1) and not found:
if str1[pos_string1] == list1[pos_string2]:
found = True
else:
pos_string2 = pos_string2 + 1
if found:
list1[pos_string2] = None
else:
chk_var = False
pos_string1 = pos_string1 + 1
return chk_var
str1 = "ythopn"
str2 = "python"
print("String value1 : " , str1)
print("String value2 : " , str2)
Boolean_out = checking_anagram('ythopn','python')
if Boolean_out:
print( "Both words are Alogram " )
else:
print( "Both words are not Alogram " )
输出:
String value1 : ythopn
String value2 : python
解释:
在这种方法中,我们使用位置字符比较来获取两个字符串的变位词。在外部while循环中,用于处理其中一个字符串,在内部循环中,用于另一个字符串。一个字符串的字符将与另一个字符串中的每个字符进行比较,这个过程在第一个字符串的每个字母上都会执行。如果第一个字符串的所有字符都与另一个字符串匹配,那么两个字符串都是变位词。
这种技术是一个非常稳定的过程,因为它基于算法技术,精确判断字符串。