[英]Check if any words in two lists are anagrams
我正在尝试编写一个 function ,它包含两个任意长度的列表,如果 list_1 中有任何单词是list_2
中的字谜,则返回True
,否则返回 false 。
例如:
words1 = [“dog”, “kitten”] words2 = [“tiger”, “god”] 返回 True,因为“dog”和“god”是变位词。
words1 = [“doggy”, “cat”, “tac”] words2 = [“tiger”, “lion”, “dog”] 返回 False,因为 words1 和 words2 之间不存在变位词对。
我有一个代码版本,我可以在其中检查特定字符串的字谜,但不确定如何通过两个列表 go 并交叉检查单词:
def anagram_pair_exists(words1, words2):
if(sorted(words1)== sorted(words2)):
return True
else:
return False
任何帮助表示赞赏
假设你有一个check_anagram
function 需要两个词并给你一个bool
结果,你可以使用这个:
any(check_anagram(word1, word2) for word1 in list1 for word2 in list2)
我做了一个带循环的版本。 不确定它是否对庞大的列表最有效,但它确实有效。
def findAnagram(list1, list2):
# The lists are preallocated with the right size
sortedList1 = [None] * len(list1)
sortedList2 = [None] * len(list2)
# Take all the words and sort their letters in alphabetical order (and store them in the new list)
for index, item in enumerate(list1):
sortedList1[index] = sorted(item)
for index, item in enumerate(list2):
sortedList2[index] = sorted(item)
# For each item check if it is in the other list
for item in sortedList1:
if item in sortedList2:
return True
return False
您可以尝试使用这样的列表:
words1 = ["dog", "kitten"]
words2 = ["tiger", "godo"]
print(findAnagram(words1, words2))
如果你需要检查你有多少个字谜,你可以使用count()
function。
而不是if item in sortedList2:
,使用number_count = sortedList2.count(item)
并通过增加另一个变量来跟踪总量。
如果您需要知道哪个单词是变位词,请更改循环,以便返回原始(未排序列表)中此索引处的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.