测试元组集合中的值

时间:2012-05-17 01:32:42

标签: python

假设我们有以下设置S和值v

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

我想测试v是否是集合中任何对的第二个元素。我目前的做法是:

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

我真的不喜欢这个,因为我必须把它放在一个单独的函数中,有些东西告诉我可能有更好的方法。任何人都能解释一下吗?

3 个答案:

答案 0 :(得分:6)

any函数是为此量身定制的:

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

如果您有一个不经常更改的大集,您可能希望将y值投影到集合上。

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

当然,如果您在yy更改后计算S一次,而不是在每次会员资格测试之前计算,这只会带来好处。

答案 1 :(得分:2)

你不能进行O(1)查找,所以你没有从集合中获得太多好处。您可以考虑构建第二个集合,特别是如果您要进行大量查找。

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

v = 3
if v in T:
    # do something

答案 2 :(得分:1)

琐碎的回答是any(见Marcelo的回答)。

替代方案是zip

>>> zip(*S)
[(4, 0, 2), (5, 1, 3)]
>>> v in zip(*S)[1]
True
相关问题