说我有元组列表:
list = [(1,5), (1,7), (2,3)]
Python中有没有办法写类似
if (1, *) in list: do things
在哪里*
意味着“我不在乎这个值”?因此,我们正在检查1
第一个位置是否有一个元组,第二个位置是否有任何值。
据我所知,其他语言也有特殊的机制,但是我只是不知道这个特殊问题的名字。那么Python中有类似的行为吗?
PS:我知道我可以在这里使用列表推导。我只是对此特定机制感兴趣。
本地不支持您所要求的占位符对象,但是您可以自己创建类似的对象:
class Any(object):
def __eq__(self, other):
return True
ANYTHING = Any()
lst = [(1,5), (1,7), (2,3)]
该__eq__
方法定义两个对象如何测试相等性。(有关详细信息,请参见https://docs.python.org/3/reference/datamodel.html。)在这里,ANYTHING
对于与任何对象的相等性,始终将测试为肯定。(除非该对象也__eq__
以返回False的方式覆盖。)
该in
运营商仅仅要求__eq__
在您的列表中的每个元素。即a in b
执行以下操作:
for elem in b:
if elem == a:
return True
这意味着,如果您说的话(1, ANYTHING) in lst
,Python将首先与(1, ANYTHING)
中的第一个元素进行比较lst
。(反过来,Tuples定义__eq__
,如果其所有元素的所有结果都返回True,则__eq__
返回True。即(x, y) == (a, b)
等于x==a and y==b
或x.__eq__(a) and y.__eq__(b)
。)
因此,(1, ANYTHING) in lst
将返回True,而(3, ANYTHING) in lst
将返回False。
另外,请注意,我重命名了您的列表,lst
而不是list
为了防止名称与内置Python冲突list
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句