3

次のセット、、、Sおよび値があるとしますv

S = {(0,1),(2,3),(4,5)}
v = 3

vセット内のペアのいずれかの2番目の要素であるかどうかをテストしたいと思います。私の現在のアプローチは次のとおりです。

for _, y in S:
    if y == v:
        return True
return False

別の関数に配置する必要があり、何かがそれを行うためのより良い方法があると私に言っているので、私はこれが本当に好きではありません。誰かが光を当てることができますか?

4

3 に答える 3

6

このany関数は、次のようにカスタマイズされています。

any( y == v for (_, y) in S )

頻繁に変更されない大きなセットがある場合は、y値をセットに投影することをお勧めします。

yy = set( y for (_, y) in S )
v in yy

もちろん、これは、すべてのメンバーシップテストの前ではなく、変更yy後に1回計算する場合にのみメリットがあります。S

于 2012-05-17T01:34:29.140 に答える
2

O(1) ルックアップを実行できないため、セットを使用してもあまりメリットがありません。特に多くのルックアップを行う場合は、2 つ目のセットを作成することを検討してください。

S = {(0,1), (2,3), (4,5)}
T = {x[1] for x in S}

v = 3
if v in T:
    # do something
于 2012-05-17T01:39:15.997 に答える
1

些細な答えはany(マルセロの答えを参照)です。

代替はzip.

>>> zip(*S)
[(4, 0, 2), (5, 1, 3)]
>>> v in zip(*S)[1]
True
于 2012-05-17T01:46:39.360 に答える