python-3.x - 查找编号按顺序出现
问题描述
我需要找出给定的数字是否存在于给定的序列中。数列是公差为2的算术级数
例如输入 1 - 5, 7, 9, 11, 13, 15, . . . 因为这个序列键是 19,所以它存在于序列输出中。对于 input2 - 是 4,6,8,10... 给定键是 15,所以它不存在,输出应该是 False。我已经编写了代码,但它仅适用于奇数的第一组输入。它对于偶数的 input2 失败
arr = 4,6,8
n=10
b=max(arr)
l=[]
if b>n:
c=b
else:
c=n
d=arr[1]-arr[0]
for i in range(1,c+d+1,d):
l.append(i)
if n in l:
print("True")
else:
print("False")
输出 1 - 真输出 2 - 假
解决方案
您可以利用range
的智能实现__contains__
来获得单线 O(1) 解决方案:
print(6 in range(2, 10, 2))
# True
print(5 in range(2, 10, 2))
# False
还有一个极端的例子来展示它的速度和可扩展性(大小range
无关紧要):
from timeit import Timer
print(min(Timer(lambda: 1_000_000_000 in range(2, 1_000_000_003, 2)).repeat(1000, 1000)))
# 00032309999999990957
推荐阅读
- symfony - PhpStorm Xdebug Symfony 配置
- regex - REGEXREPLACE 中用匹配字符串替换的替换是什么?
- python - 如何使用 python 删除字典对象?
- r - 在 R 中,根据其他列中的值创建顺序 1 到 N 列
- html - 为什么图片后面的文字消失了
- postgresql - Postgres SERIAL 列自动提交间隙
- mongodb - 为什么 MongoDB 不使用与其他 DBMS 相同类型的 ID?
- c++ - c++ (fstream w/r)使用继承,派生类实际上是两个类吗?
- assembly - 如何在 TASM 中找到文本模式页面缓冲区?
- javascript - 如果我搜索不在表格中的内容,如何显示“未找到记录”?