2

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 の他のノードを描画します。

4

2 に答える 2

4

条件式( pep-308 )を使用します。

[50 if hasProperty(x) else 10 for x in alist]
于 2010-09-24T21:49:04.070 に答える
3

どうですか:

[50 if hasProperty(x) else 10 for x in aList]

?

于 2010-09-24T21:49:05.080 に答える