0

您好,我遇到了一个问题,我必须列出一个列表并在这些列表中找到各个乐队,看看他们是否都有一个共同喜欢的乐队。如果是这样,我应该输出true。我需要遵循这种编程方法来模块化我的代码,但我似乎无法理解它。到目前为止,这是我的代码。感谢您提供的所有帮助。

favoriteBandLists = [["Metallica","Linkin Park","Alice In Chains","Nirvana", "Soundgarden"],
    ["Pink Floyd","Alice In Chains","Soundgarden","Metallica","Linkin Park"],
    ["Audioslave","Offspring","The Beatles", "Soundgarden"]]

def commonFavoriteBand(favoriteBandLists):

    thereExists= False
    for i in (favoriteBandLists[2]):
        if(commonFavoriteBandA(favoriteBandLists)):
            thereExists = True
    return (thereExists)

def commonFavoriteBandA(favoriteBandLists):

    foundCounterExampleYet = False
    for band in favoriteBandLists[2]:
        if not(band == favoriteBandLists[0:1]):
            foundCounterExampleYet = True
    return not foundCounterExampleYet

print(commonFavoriteBand(favoriteBandLists))
4

2 回答 2

1

使用与set对象相交

set(["Metallica","Linkin Park","Alice In Chains","Nirvana", "Soundgarden"]).intersection(["Pink Floyd","Alice In Chains","Soundgarden","Metallica","Linkin Park"])
set(['Linkin Park', 'Alice In Chains', 'Soundgarden', 'Metallica'])

编辑

如果需要遍历列表,您可以使用任何列表遍历函数,例如 map、filter 或 reduce。

favoriteBandLists = [["Metallica","Linkin Park","Alice In Chains","Nirvana", "Soundgarden"],
    ["Pink Floyd","Alice In Chains","Soundgarden","Metallica","Linkin Park"],
    ["Audioslave","Offspring","The Beatles", "Soundgarden"]]
reduce(lambda a, b: a.intersection(b), (set(a) for a in favoriteBandLists))
set(['Soundgarden'])
于 2014-12-18T17:06:03.497 回答
0

如果你真的想写一些东西来表明你正在模块化你的代码,首先创建一个函数来返回两个列表中的公共元素:

def commonBand(L1, L2):
    answer = []
    for band in L1:
        if band in L2:
            answer.append(band)
    return answer

现在,多次重复调用该函数:

def main(listOfLists):
    i = 1
    answer = listOfLists[0]
    while i<len(listOfLists):
        answer = commonBand(answer, listOfLists[i])
        if not answer:
            break
        i += 1
    return answer

输出:

In [193]: main(favoriteBandLists)
Out[193]: ['Soundgarden']

注意:这对我来说似乎是一个家庭作业问题,所以我的代码有利于它。否则我会使用已在此处的其他回复中讨论过的设置交集方法

于 2014-12-18T17:56:34.183 回答