最受欢迎的乐队Python

2024-09-26 18:12:02 发布

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

你好,我有一个问题,我必须采取一个名单,并在这些名单中找到个别乐队,看看他们是否都有一个共同的最喜欢的乐队。如果是这样,我应该输出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))

Tags: 代码inparkdefalice名单乐队chains
2条回答

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

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']

注意:这对我来说像是一个家庭作业问题,所以我的代码有助于解决这个问题。否则的话,我会使用集合交集方法,这在这里的其他回答中已经讨论过了

使用来自set对象的intersect

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'])

相关问题 更多 >

    热门问题