简化链式比较


254

我有一个整数值x,我需要检查它是否在startend值之间,因此我编写了以下语句:

if x >= start and x <= end:
    # do stuff

该声明带有下划线,并且工具提示告诉我必须

简化链式比较

据我所知,这种比较就和它们来的一样简单。我在这里错过了什么?


1
如果您从工具提示中获得建议,则可以将鼠标悬停在该区域上,它会为您提供一个小灯泡。您可以单击它,让它自动插入建议的更改。这样您就可以查看它认为应该执行的操作(如果您不喜欢它,可以撤消操作)。
爱德华·内德·哈维

Answers:


431

在Python中,您可以“链接”比较操作,这仅意味着它们“并”在一起。在您的情况下,将是这样的:

if start <= x <= end:

参考:https : //docs.python.org/3/reference/expressions.html#comparisons


2
谢谢,我不知道您可以在Python中做到这一点。真的很伤脑筋。
Brynn McCullagh 2014年

18
伙计,这就是应该的样子。但是来自其他语言的您会忘记自己的理想,甚至都不认为事情可能是应该的样子。但这就是python之所以令人惊奇的原因,正是由于这些原因:)
Hakaishin

您是否知道有任何“官方”资源推荐链式风格?哪一个是“惯用” Python?

我不知道,有时候我希望python扔出更多的护栏。x == y ==当x,y,z为熊猫系列时,z失败并发生ValueError
BallpointBen 19'Jan

@BallpointBen:很多事情都无法像您在熊猫中所期望的那样工作,甚至没有x == y and y == z
约翰·兹温克

12

可以重写为:

start <= x <= end:

要么:

r = range(start, end + 1) # (!) if integers
if x in r:
    ....

5
该范围是一个糟糕的选择,因为对于大的开始和结束,您正在创建不必要的列表。
Burhan Khalid 2014年

1
@BurhanKhalid的确如此,但是我想对于OP值得一提。
Maroun 2014年

7
在python3中,范围句柄“ 包含 ”很好,因此不会生成列表。
JoshNahum

2
@MarounMaroun自python 3起,范围函数的行为就像以前的xrange一样,值得一提
dvdvck

5
有关使用的详细信息if x in range(...),请参见“ 为什么“范围3中的1000000000000000(1000000000000001)”在Python 3中这么快? ”。
凯文·J·蔡斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.