如何解决无论值的顺序如何,都从集合中删除长度为2的元组
我有一组长度为2的元组。集合中的元组可以采用(x,y)
格式或颠倒的(y,x)
格式。
可以保证在集合中存在一个元组(x,y)
或(y,x)
,但是我无法事先知道顺序是什么。
我需要从集合中删除(x,x)
,而不知道它是哪一个。
我这样尝试过:
def flexRemove(S,tup):
try:
S.remove(tup)
except:
S.remove(tuple([tup[1],tup[0]]))
S = {(6,1),(2,4),(3,8),(7,5)}
flexRemove(S,(4,2))
上面的示例根据需要从集合中删除(4,2)
或(2,4)
。
是否有更优雅或更Python的方式来实现此目的(不调用异常)?
解决方法
您可以使用if ... else
语句代替try ... except
块。
引用此答案Using try vs if in python
因此,尽管if语句总是要花你很多钱,但几乎可以自由设置 尝试/除外块。但是当实际发生异常时,代价是 更高。
因此,如果您的代码经常引发异常,则try...except
语法的性能会降低。另外,我发现下面的语法更具可读性,但是如果您愿意,这更多是一个优先问题。
def flexRemove(S,tup):
if tup in S:
S.remove(tup)
else:
S.remove(tuple([tup[1],tup[0]]))
S = {(6,1),(2,4),(3,8),(7,5)}
flexRemove(S,(4,2))
print(S)
您也可以像下面这样写一线:
def flexRemove(S,tup):
S.remove(tup) if tup in S else S.remove(tuple([tup[1],tup[0]]))
输出:
{(6,5),8)}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。