宽搜索类似的功能,应该会返回两个列表,一个包含已访问的项目,另一个包含您

2024-06-28 20:48:52 发布

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

在下面的函数中,我尝试模拟一个类似于广泛搜索的函数

第一个函数'Hello'通过给定和搜索name=V,应该为您提供列表中的所有元组伙伴

第二个函数应该有两个列表,第一个是已经访问过的列表,第二个是仍然在列表中的列表,即que

使用两个for循环,我按照中给出的单词遍历了新生成的列表,这样我就可以使用这些单词生成更多的元组伙伴,它们不在besucht列表中。使用完成后,该项将从“列表”中删除并附加到besucht

问题:它没有按照我的预期工作,我不明白为什么

V = {'CGN', 'FRA','KEL','MUC','PAD','SFX','STR','TXL'}

E = {('SFX','TXL'),('FRA','CGN'),('FRA','MUC'),('FRA','STR'),('CGN','FRA'),('STR','FRA'),('TXL','SFX'),('CGN','PAD'),('PAD','KEL'),('MUC','KEL'),('KEL','STR')   }
S = {('A','B'),('A','B')}

def Hallo(V,E):
    Total = []
    Que = []
    for i in E:

        for j in i:
            if j == V:
                Total.append(i)

    for i in Total:
        for a in i:
            if a != V:
                if a not in Que:

                    Que.append(a)

    return Que


def Durchsuchen(V,E):
    besucht = []
    Liste = []
    Liste.append(Hallo(V,E))
    besucht.append(V)

    while len(Liste) !=0

        for i in Liste:
            if i not in besucht:
                besucht.append(i)
                Liste.remove(i)
                Liste.append(Hallo(i,E))





    print Liste
    print  besucht


print Durchsuchen('FRA',E)

应该做什么?它应该给你所有的可能性,即如果你给出“FRA”,它将生成[MUC、STR、CGN],因为MUC等在这个列表中,这也应该给你KEL例如。也就是说,所有可能的选择都存在


Tags: 函数in列表forifquemucpad
1条回答
网友
1楼 · 发布于 2024-06-28 20:48:52

您的问题是在循环中的列表上使用remove(),该循环在列表中进行迭代,这是不应该做的。这会更改循环所依赖的逻辑,并导致意外结果

第一个函数工作得很好,所以我建议您在第一个单词“FRA”上使用一次,然后在与之匹配的每个单词上使用它-[MUC,STR,CGN]在您的示例中。然后在您得到的列表上使用以下代码:

newList = []
    for ls in listOfLists:
        for word in ls:
            if word not in newList:
                newList.append(word)

相关问题 更多 >