C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

リストAの全ての要素がリストBに含まれているか?

分かりにくい表題なのですが、表題の件をpython
清楚に書くにはどうすれば良いのか? 疑問に感じました。

もうちょっと具体的に説明すると、フルーツのリスト

        fruits = ["Apple", "Banana", "Orange", "Grape"]

があり、"Banana"はフルーツに含まれるか?を調べるには

        print("Banana" in fruits)

で "True" を返してくれます。当然だ、バナナはフルーツの王様?だからね。


ここで、バスケットを用意し中にこんな感じで入れておきます。

        basket = ["Banana", "Orange"]

バナナは欠かさない!

このバスケットの中身全てが、フルーツに含まれるか?
と言うのが表題の意味です。

最初はこんな感じでイケルんじゃない? と思いました。

        print(basket in fruits)

これだと "False" なんです。恐らく言葉にすると
"バスケットはフルーツに含まれるか?"
と言う解釈をされるのでしょう。そりゃFalseです。

こんな事程度で、isFruits関数を用意するのも大げさに
に感じるので・・・中身を取り出しつつ全部確認する
ようにすると、こんな感じかな?

        print(all(item in fruits for item in basket)) 

一個づつ確認して、全部フルーツだったらバスケットの
中身は全てフルーツ ってイメージです。

念の為、確認の為こんな感じに手に持ってみます。

        hands = ["Banana", "Cat"]

バナナは欠かすな。

確認してみると

        print(all(item in fruits for item in hands)) 

無事、Falseになります。猫はフルーツじゃない!


・・・よく考えると、リストがセットに変換可能な場合に
限れば、両セットの積をとり、目的のセットと一致すれば
全て含まれている事になるかな?と。

こんな感じです。

        print(set(fruits) & set(basket) == set(basket)) 
        print(set(fruits) & set(hands) == set(hands)) 

allを使った場合と結果は同じです。

とは思いつつ、何かズバリの関数が有るんじゃないかな・・・。