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

コードをモジュール化していることを示す何かを本当に書きたい場合は、まず、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']

注:これは宿題の質問のように思えたので、私のコードはそれを助長しています。それ以外の場合は、ここの他の回答で説明されている集合交差法を使用していたでしょう

于 2014-12-18T17:56:34.183 に答える