繁体   English   中英

检查两个列表中是否有任何单词是变位词

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM