Pythonで次のことを行う最も簡単でエレガントな方法は何ですか:
def piecewiseProperty(aList):
result = []
valueTrue = 50
valueFalse = 10
for x in aList:
if hasProperty(x):
result.append(valueTrue)
else
result.append(valueFalse)
return result
hasProperty
ブール値の戻り値を持つ関数はどこにありますか。
それを行うための1つの短い(ただし不透明で、おそらく効率の悪い)Rのような方法はこれです
trueIndexSet = set([ ind for ind,x in enumerate(aList) if hasProperty(x) ])
falseIndexSet = set(range(0:len(aList)).difference(trueIndexSet)
vals = sorted( [ (ind,10) for ind in falseIndexSet ] + [ (ind,50) for ind in trueIndexSet ] )
[ x for ind,x in vals]
別のより整然としたアプローチは、辞書検索を使用します。
[ {True:50, False:10}[hasProperty(x)] for x in aList ]
これを行うための巧妙で読みやすいワンライナーまたは組み込み関数はありますか? それは基本的に if...else リスト内包表記になります。
この質問の適用: 興味がある場合に備えて、これを使用してネットワーク内のノードにサイズを割り当て、異なる方法で描画されるようにします。サイズ 10 の接頭辞「small_」で名前が付けられたノードを描画し、サイズ 50 の他のノードを描画します。