Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元组集合中值的测试_Python - Fatal编程技术网

Python 元组集合中值的测试

Python 元组集合中值的测试,python,Python,假设我们有以下集合,S,以及值v: S = {(0,1),(2,3),(4,5)} v = 3 我想测试v是否是集合中任何对的第二个元素。我目前的做法是: for _, y in S: if y == v: return True return False 我真的不喜欢这样,因为我必须把它放在一个单独的函数中,有些东西告诉我可能有更好的方法来实现它。有人能解释一下吗?任何功能都是为此量身定做的: any( y == v for (_, y) in S ) 如果有一个

假设我们有以下集合,
S
,以及值
v

S = {(0,1),(2,3),(4,5)}
v = 3
我想测试
v
是否是集合中任何对的第二个元素。我目前的做法是:

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

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

任何功能都是为此量身定做的:

any( y == v for (_, y) in S )
如果有一个不经常更改的大型集合,则可能需要将y值投影到集合上

yy = set( y for (_, y) in S )
v in yy
当然,只有在
S
更改之后,而不是在每次成员资格测试之前,才计算
yy
一次,这才有好处。

您无法进行O(1)查找,因此您没有从集合中获得太多好处。你可能会考虑建立第二套,特别是如果你做了很多查找。

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

v = 3
if v in T:
    # do something
琐碎的答案是(见马塞洛的答案)

另一种选择是

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