相关疑难解决方法(0)

Python:有效地检查整数是否在*many*范围内

我正在开发一个邮资申请,需要根据多个邮政编码范围检查整数邮政编码,并根据邮政编码匹配的范围返回不同的代码.

每个代码都有多个邮政编码范围.例如,如果邮政编码在1000-2429,2545-2575,2640-2686范围内或等于2890,则应返回M代码.

我可以这样写:

if 1000 <= postcode <= 2429 or 2545 <= postcode <= 2575 or 2640 <= postcode <= 2686 or postcode == 2890:
    return 'M'
Run Code Online (Sandbox Code Playgroud)

但这似乎是很多代码行,因为有27个可返回代码和77个总范围要检查.是否有更高效(并且最好更简洁)的方法使用Python将整数与所有这些范围匹配?


编辑:有很多优秀的解决方案,所以我已经实现了所有可能的解决方案,并对其性能进行了基准测试.

该程序的环境是一个Web服务(实际上是Django),它需要在运行中逐个检查邮政编码区域代码.那么,我的首选实现是可以快速用于每个请求的实现,并且不需要将任何进程保存在内存中,或者需要批量处理许多邮政编码.

timeit.Timer使用随机生成的邮政编码每次使用默认的1000000次重复测试以下解决方案.

IF解决方案(我的原创)

if 1000 <= postcode <= 2249 or 2555 <= postcode <= 2574 or ...:
    return 'M'
if 2250 <= postcode <= 2265 or ...:
    return 'N'
...
Run Code Online (Sandbox Code Playgroud)

1m代表的时间:5.11秒.

元组中的范围(Jeff Mercado)

我脑子里更优雅,更容易进入和阅读范围.如果它们随时间变化特别好,这是可能的.但它的实施速度确实慢了四倍.

if any(lower <= postcode <= upper for (lower, upper) in [(1000, 2249), (2555, …
Run Code Online (Sandbox Code Playgroud)

python

39
推荐指数
5
解决办法
2万
查看次数

标签 统计

python ×1