2017-02-08 7 views
0

私は関数リストを保存していますが実行していません。
このリストを繰り返して、私が探しているアイテムの1つがリストに存在するかどうかを確認する必要があります。関数がリスト(Python)にあるかどうかを見つけるには

どうすればいいですか?

機能の保存方法は次のとおりです。

self.pysat_fun.set_fun_list(self.pysat_fun.set_file_outpath) # add this function to the pysat list to be run 

def set_fun_list(self, fun, replacelast=False): 
    if replacelast: 
     self.fun_list[-1] = fun 
    else: 
     self.fun_list.append(fun) 

以下に一覧に含まれる内容を確認できます。 enter image description here

私の試みです。

簡単に
for i in range(0, len(self.fun_list)): 
     if pysat_func.do_norm in self.fun_list: 
      print("True") 

答えて

1
for i in range(self.leftOff, len(self.fun_list)): 
    if pysat_func.do_norm == self.fun_list [i]: 
     print("True") 
     break 

または、次のように動作します

print (pysat_func.do_norm in self.fun_list [self.leftOff : ]) 

self.fun_list 

は、あなたがあなたの関数を検索したいリストです。あなたの元のコードから、それはあなたが唯一のインデックスself.leftOffを持つ要素から検索したい ようですので、

self.fun_list [self.leftOff : ] 

は、そのリストの末尾です。

[self.leftOff : ] 

はスライスと呼ばれ、「」の後の空白は「終わりまで」を意味します。 pysat_func.do_normaList

にある場合にのみので

pysat_func.do_norm in self.fun_list [self.leftOff : ] 

場合Trueに評価されるブール式であり、 pysat_func.do_normである場合だけ

pysat_func.do_norm in aList 

Trueに評価されるブール式であります私が話した尾の中で

print (anyThing) 

は、上記のTrue(またはFalse)のようなものが中括弧内に印刷されます。

結合方法は、特定のリストであり、そのうちの一例ではありません:

class A: 
    def f (self): 
     print ('f') 

    def g (self): 
     print ('g') 

a1 = A() 
a2 = A() 

aList = [a1.f, a2.g] 

print (
    a1.f in aList, 
    a1.g in aList, 
    a2.f in aList, 
    a2.g in aList 
) 

プリント:

+0

True False False True 
珍しいです。あなたの印刷機能を使用すると、間違って印刷されます – tisaconundrum

+0

印刷がforループの外にある必要がありますか? 'print(pysat_func.do_norm in self.fun_list [self.leftOff:])' – tisaconundrum

+0

あなたは1つの関数しか見ていないので(最初のコードブロックの印刷が正しい場所にあります)関数が見つかった場合、ブレークはループから飛び出します。第2のコードブロックは、第1のコードブロックと等価でなければならない。実際にBOUND関数を保存していますか?だからobject_a.do_normはobject_b.do_normとは違うのですか?あなたが提出した古い質問を見て、ラムダを保管しているのではないでしょうか?コンテキストコードを表示することがあります。 –

関連する問題