2016-05-04 17 views
1

こんにちは、私はそれをやり遂げる方法を見つけたので、これは役に立たない質問のように思えるかもしれませんが、もっと速い方法があるかどうか知りたいのですが特定のクラスを検証するリストの項目数。クラスのオブジェクトがいくつあってもリストに含まれています

これまでのところ、私がやっている:

items_from_class = 0 
for x in Mylist: 
    if isinstance(x, Myclass): 
     items_from_class += 1 
if items_from_class > 2; 
    do something ... 

を私は1行に収まる何かをしたいと思い、同じよう:

if isinstance(x,Myclass) in Mylist > 2: 
    do something ... 

はあなたの助けをありがとう!

+0

あなたが望むすべては私が必要とするすべてだ瞬間に3つ以上の –

+0

はい、そこにあるかどうかを知ることですが、私は質問をされた場合は、[はい、あなたはthree.thereを見つけた場合破ることは、それ以上のチェックはポイントではありませんより一般的な目的のために私はそれのために他の用途を持っています。 – Sorade

答えて

2

人々はリストやラムダを何も作成したくないと驚いています。

if sum(1 for x in items if isinstance(x, MyClass)) > 2: 
    ## do stuff 
-1

あなたがすることができますあなたの質問

+0

ダウン投票は非効率的なのですか?私がこれを投稿した理由は、インタプリタが最適化を行うことができ、コードが読みやすくなったからです。また、コードは要件と同じように1行に収められています。 –

+0

非効率的とはどういう意味ですか? @Padraic Cunninghamの示唆したように、「ブレーク」を使って自分の調合物に固執する方が良いでしょうか?私はPygameで2Dのゲームを開発していますので、ゲーム全体が非常に難しいとは思わないので、あなたの提案を使用することはうまくいくはずです。 – Sorade

+0

(my)downvoteは、リスト全体を作成するだけでなく、リストを再利用しないときには、リストの長さを取るために、ちょっと厄介なコードだからです。確かに、それは動作しますが、元の投稿もそうです;ポイントは*より良い*コードを書くことです、そしてそれはより多くのPythonicを含みます。 – dwanderson

0

に答えるあなたの条件については、以下のコード

myClassElements = [ x for x in itemList if isinstance(x,MyClass) ] 
if len(myClassElements) > 2: 
    ...do something 

希望は、あなたが探しているものを、このですか?

if sum(map(lambda x: isinstance(x, MyClass), MyList)) > 2: 
    ...do stuff 
関連する問題