• ベストアンサー

Pythonでの属性による検索について

お世話になります。pythonによるコーディングを始めたばかりでつまづいています。  クラスを使って複数のインスタンスを作成しました。各インスタンスには4つの属性、A、B、C、Dがあるとします。このときに例えば属性A=1、属性B=0、属性C=1を同時に満足するインスタンスを検索して、そのインスタンスの属性Dの値を取得したいのですが、どのようにすればよいのでしょうか。御指南いただけませんでしょうか。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1527/2222)
回答No.1

listとfilterとlambdaを使ってこんな感じ。list l1にappendしたFooのインスタンスの中で条件を満たすものがlist l2になります。条件を満たすインスタンスが複数ある場合も考慮しています。 class Foo:  def __init__(self, a, b, c, d):   self.a = a   self.b = b   self.c = c   self.d = d l1 = list() l1.append(Foo(1, 1, 1, 11)) l1.append(Foo(1, 0, 1, 12)) l1.append(Foo(1, 0, 1, 13)) l1.append(Foo(0, 0, 1, 14)) l2 = filter(lambda x: x.a == 1 and x.b == 0 and x.c == 1, l1) for obj in l2:  print(obj.d) 実行結果 12 13 OKWAVEの都合により字下げ部分には全角空白を使っているので、書き換えないと動かせないことに注意。

kujirunner
質問者

お礼

回答頂きました通りにやってみたら、上手くいきました。どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Pythonで属性とは?

    プログラミング初心者です、よろしくおねがいします 自分でも調べたのですが初心者すぎて用語が難しく解らないところが多くはっきりしないので教えてください。 Pythonでいうオブジェクト、メソッド、属性の違いはなんですか? 私の今の所の知識では オブジェクト=クラスやメソッドやクラス変数 メソッド=クラスの中に有る関数 属性=クラスの中にある関数や変数など じゃ、オブジェクトと属性の違いってなんなの?ということに 以下の例題でA objects are given a color attribute of "white"とあります attribute=属性ですよね? つまり属性とはインスタンス変数の中身のことなの? class A(object): ....def __init__(self): ........self.color = "white" word = A() print(word.color) 有識者の方々にはくだらなすぎる疑問かも知れませんがよろしくおねがいします

  • pythonのメゾッドの整合性について

    こんばんは。 pythonを勉強し始めましたが理解できない部分があって質問させて頂きます。 プログラム、特にオブジェクト指向をまだよく理解していないのである程度初心者向けの回答をお願いします。 pythonにおいて文字列はオブジェクトであり、 >>> strA = "python" >>> print (strA) python >>> print (strA.upper()) PYTHON >>> print (strA) python のように使われるメゾッドが存在しています。 これはオブジェクト自体を変化させるのではなく、今回の場合ではオブジェクトがupper()されたオブジェクトを返しています(まちがっていませんよね?)。 そのため、strA自体を変化させるには >>> strA = strA.upper() >>> print (strA) PYTHON のようにする必要があると理解していました。 ここで新しいオブジェクトlistを用いた時 >>> tl = ['A','B','C','D','E','F'] >>> print (tl) ['A', 'B', 'C', 'D', 'E', 'F'] >>> print(tl.reverse()) None >>> print(tl) ['F', 'E', 'D', 'C', 'B', 'A'] >>> listA.reverse() となります。文字列から類推すると >>>tl = ['A','B','C','D','E','F'] >>>print (tl.reserve()) ['F', 'E', 'D', 'C', 'B', 'A'] >>>print(tl) ['A','B','C','D','E','F'] >>>tl =tl.reserve() >>>print (tl) ['F', 'E', 'D', 'C', 'B', 'A'] のような振る舞い方を行うのが"正しい"と思うのですがなぜ違うのでしょうか?

  • Python inputについて

    次の条件の時、inputで取得する方法を教えてください。(リストに格納する) a b (2つ) ←これはinput().split()? a b c ... (複数) a,b,c,...(コンマで区切る) a b c ... (複数行) a b c ... d e f ... g h i ... ... (複数の複数行) また、a b c (入力が3つと決まっている時) a b c ... (入力が3つ以上の時) の2つの構文はどのように違いますか? いろいろありますが、わかる方は教えてください!

  • Cのルートの属性

    Cのルートの属性を間違って消してしまいました。 属性無しのものも含めて一般的な属性を、ファイルかフォルダかの値もつけて、例えば C:\ATI(D) C:\AUTOEXEC.BAT(F,A) のように教えてください。

  • Pythonのreadlineについて

    最近Pythonのプログラミングを始めたのですが、Pythonのプログラミングについて以下のことを行いたいのですが、やり方が分からず困っております。 Pythonで行いこと 1.textファイルに例えば以下のようにいくつかの係数を入力しておきます。 a:0.5, b:0.8, c:0.9 2.上記のテキストファイルを読み込み、pythonの変数a、b、cに値を格納したいと考えています。 色々検索している中でテキストファイルの読み込みはf=open(xxx.txt)で読み込み、各行の読み込みはreadline()というコマンドでできることは分かったのですが、lines=f.readline()とした後、その"line"の中からaが0.5、bが0.8という数字部分だけを切り出してプログラム中の変数に渡す方法が分からない状態です。 皆様のお知恵を拝借いたしたく、宜しくお願いいたします。

  • Python:ifについて

    Python初心者です。 ある変数(a,b,c)で条件A(a<b+c and b<a+c and c<b+a)があるとする。 ・条件Aを満たさない場合:0 ・条件Aを満たしたうち、  条件Bを満たす:1  条件Cを満たす:2  条件Dを満たす:3 このように「Aがtrueの中で、別の条件を満たす場合~」とういうのはどのように書けばいいでしょうか。

  • formでのチェックボックスのname属性について

    例えば以下のようなフォームがあるとき、 ----------------------------------------------------------------------------- <form name="f"> <input type="checkbox" name="group1" id="a" value="a"/><label for="a">a</label> <input type="checkbox" name="group1" id="b" value="b"/><label for="b">b</label> <input type="checkbox" name="group1" id="c" value="c"/><label for="c">c</label> <input type="checkbox" name="group1" id="d" value="d"/><label for="d">d</label> </form> ----------------------------------------------------------------------------- javascriptでは、document.f.group1で配列として取得できるのですが、 phpでは、$_POST["group1"]では最後にチェックされている項目しか取得できません。 (つまり、phpでは複数選択されていても、一番後ろの1項目しか取得できません。) 少し調べるとphpで取得するには、 name属性値を、group1からgroup1[]とすれば配列として取得できるとありました。 しかしこれでは、javascriptの方でname属性値を使って取得できなくなってしまい、 document.f.getElementsByTagName("input")みたいな感じで取得することになると思います。 そもそも、name属性値に"["や"]"を使うことは良くないと思うので、 phpの方で何らかの方法があると思ったのですが、 最近勉強を始めたばかりの初心者なのでよくわかりませんでした。 今知っているphpに配列で渡す方法が、 「name属性値をgroup1[]のように配列にする」しか無いので、 他に方法があるならば教えてください。 質問の前提として、 1.name属性はフォーム内の項目のグループ化をしている? 2.name属性値に"["や"]"は仕様では使用可能な文字ではない? 1,2ともにYesだと思っています。 もし、この前提が間違っていたらご指摘ください。 質問内容を要約すると、 「checkboxをphpで配列で取得する方法はname属性値を配列にするしかないのですか?」 「他に方法があるなら教えてください」 です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 継承・実装の関係で悩んでいます。

    継承・実装の関係について悩んでいます。 ここでは、アクセス制御を考えずに、インスタンスかstaticかabstract(ここではabstract final staticやabstract classのこと)の違いで、どう継承するのか考えています。 // 継承 はメソッドのオーバーライドのことを考えます。(オーバーロードは考えない) クラスAからクラスBでオーバーライドしたメソッドは、 クラスCでさらにオーバーライドできるのでしょうか? クラスCが クラスBのクラスAからオーバーライドしたメソッド をクラスBのメソッドとして見たときに、オーバーライドすることは可能なのでしょうか? クラスA │ インスタンスフィールドA │ staticフィールドA │ │ クラスA() { } │ │ インスタンスメソッドA () { } │ staticメソッドB() { } ↓ クラスB extends クラスA │ インスタンスフィールドA // 継承 │ インスタンスフィールドB │ staticフィールドB │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ インスタンスメソッドA () { } // 継承 │ │ インスタンスメソッドB () { } │ staticメソッドB () { } ↓ クラスC extends クラスB implements インタフェースD, ... ↑ インスタンスフィールドA // クラスBのフィールドを継承 │ インスタンスフィールドB // クラスBのフィールドを継承 │ インスタンスフィールドC │ staticフィールドC │ │ サブクラス2() { } │ │ インスタンスメソッドA () { } // クラスBのメソッドを継承 │ インスタンスメソッドB () { } // クラスBのメソッドを継承 │ インスタンスメソッドD () { } // インタフェースDのメソッドを実装 │ インスタンスメソッドE () { } // インタフェースDのメソッドを実装 │ │ │ インスタンスメソッドC () { } │ staticメソッドC() { } │ interface インタフェースD extends インタフェースE ↑ │ staticフィールドD // public static final │ │ インスタンスメソッドD() { } // public abstract │ インスタンスメソッドE() { } // 継承 │ interface インタフェースE staticフィールドE // public static final インスタンスメソッドE() { } // public abstract

    • ベストアンサー
    • Java
  • python 代数を定義

    list = ['a', 'b', 'c', 'd'] X = list .pop() print(list) このコードを実行すると、print(list) の結果として ['a', 'b', 'c'] が得られることになります。 しかし私としては、['a', 'b', 'c', 'd']とならないのが不可解なのです。 なぜなら、2行目の X = list .pop() は代数Xを定義しているにすぎず、リストであるlistには影響を与えていないと思うのです。 (print(X) が ['a', 'b', 'c'] となれば納得するのですが、もちろんこの答えはdとなります。) pythonの文法上なぜこうなるのか教えて頂きたいです。

  • pythonで組合せ、順列

    pythonで、a=[4,5,6],b=[7,8],c=[9,10],x=a+b+cというリストがあり、 aの順列から1つ(a1)、bの順列から1つ(b1)、cの順列から1つ(c1)を選択し、 それらをxx=a1+b1+c1とするすべてのxxを求めるためにはどうすればいいですか? xxの例 [[6,4,5],[7,8],[10,9]]

このQ&Aのポイント
  • ESETのセキュリティソフトと他社製のセキュリティソフトの相性はどうなのか
  • 他社のウイルス対策ソフトとESETのセキュリティソフトの相性について
  • ESETセキュリティソフトと他のウイルス対策ソフトの相性について知りたい
回答を見る