Python在n个列表中查找一个单词(不知道有多少个)

2024-04-26 13:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

作为标题(我搜索了网站,但没有找到答案),我必须在n列表中找到一个共同的词。你知道吗

例如,如果我有以下列表:

list1 = ["a", "b", "c"]
list2 = ["d", "e", "a"]
list3 = ["f", "g", "h", "i", "j"]

列表1和列表2有一个共同点,即“a”。。。 显然我也可以有100张单子。。。但我不知道数字,算法必须一直工作,当然课程:P你知道吗

我想到了一个for循环,但是我从来没有得到具体的东西(在range(len(list1))中生成num),因为如果列表的长度不同,就什么也做不了。你知道吗

编辑:我道歉,也许我解释不好,我没有名单的名单。 我在处理图,在图的节点信息中,我有一个列表,在cui中,我有信息,我需要找到共享公共信息的节点,以便用弓将它们连接起来。你知道吗

在这个图中,我有n节点,根据它如何生成程序,因此我有n列表。你知道吗


Tags: 答案算法信息标题列表节点网站数字
3条回答

您可以像这样使用集合的交集(如果您有一个列表列表,则可以相应地修改)

list1 = ["a", "b", "c", "xc"]
list2 = ["d", "e", "to", "xc"]
list3 = ["f", "g", "h", "i", "j", "xc"]

print list(set(list1) & set(list2) & set(list3)) # it will print ['xc']

编写一个函数,获取iterables列表,将它们转换为集合,并获取交集,交集返回两个集合共有的元素:

def find_common_words(list_of_lists):
    current_set = set(list_of_lists[0])
    for l in list_of_lists:
        current_set = list_of_lists.intersection(l)
    return list(current_set)

我问你想要两件事中的哪一件,你回答“准确”,然后以一种仍然无法告诉我你想要两件事中的哪一件的方式澄清。所以,我还是不知道你想解决哪个问题。所以我会解释他们两个。你知道吗


首先,从您在range(len(list1))上尝试循环的事实来看,您可能只在相同位置寻找匹配项,也就是说,list1[3] == list2[3]是匹配项,而list1[3] == list2[2]不是。你知道吗

为此,通常需要^{}函数。但在这种情况下,鉴于您的评论“如果列表长度不同,则无法执行任何操作”,我假设您希望继续执行,直到最长的列表结束。为此,需要^{}函数。像这样:

for value1, value2, value3 in itertools.zip_longest(list1, list2, list3):
    if value1 == value2:
        print('found a match')

最有可能的情况是,您要检查listX与listY的所有组合。聪明的方法是使用^{}

for values in itertools.zip_longest(list1, list2, list3):
    if any(x == y for x, y in itertools.combinations(values, 2)):
        print('found a match')

这与我在评论中所说的一致:如果你有3到100个列表,你不希望它们在单独的变量中,比如list1list2list100,你希望它们在一个大的列表(或dict)中。你知道吗


或者,您可能只想将列表视为集合,并在不考虑位置的情况下查找匹配项,因此,如果list1[2] == list2[3]这很重要。你知道吗

在这种情况下,您所要求的只是集合^{}是否为非空。像这样:

if set(list1).intersection(list2, list3):
    print('found a match')

(或者,等价地,您可以reduce覆盖is_disjoint,或者用其他几种方法来做同样的事情。)

但是,如果要将列表作为集合使用,首先应该将它们存储为集合。(同样,您应该将它们存储在集合列表中,而不是3-100个单独的变量。)

相关问题 更多 >