1
pcbl 2021-02-26 14:17:04 +08:00 via iPhone
两个等差数列直接循环就可以啊
for x in range(10): a=12+42*x b=26+42*x ... 手机打的,其余部分和你的判断一样 |
2
imn1 2021-02-26 14:48:56 +08:00
此例
后面的操作很简单,只有 i+1 / i-1 两种,可以变成 01 或者 True/False 前面的是个有序序列,序列就必然有序号,即使中间有断层,不连续 你只要对应出序号和操作的关系就可以了 这样想就简单了,尤其序号是连续的 bisect 模块,参考官方的 example,那个 def grade 的例子 其他就自己思考吧,如无意外,可以扔掉 try...except 了 PS: 这个 grade 的例子用途很多的,基本上连续的整数序列,分段操作都可以用上,我至少在十多个地方用了 尤其一些时间的分段(因为时序必然是连续的),甚至不需要时间计算函数,时间函数是比较烧脑的,转为整数分段简单很多 |
3
imn1 2021-02-26 15:04:47 +08:00
嗯,看得粗了,你这个是元素之间比较,不是全部元素的应用,#2 说的不适用,要再想想
|
4
imn1 2021-02-26 15:18:40 +08:00
找到规律了,全部都是相隔 14 个位置,只用一个序列就够了
a=[12, 54, 96, ...] l=len(odds) for x in a: ....if l<=x+14: break ....if odds[x]<odds[x+14] ... 后面就不写了 |
5
BBrother 2021-02-26 16:04:43 +08:00
要不你把你想解决的问题发出来?
|
6
Sunyanzi 2021-02-26 17:16:56 +08:00
我大概看了一下 ... 如果前小后大则加前大后小则减 ... 是我的话我会这样写 ...
i.imgur.com/pG41su3.png 代码 Python 2 适用 ... 因为 xrange 和 cmp 在 Python 3 里都没有 ... 需要自己调整 ... 以及我没有测试数据 ... 凭空一写 ... 我自己觉得应该没啥问题 ... 但还是仅供参考 ... |
7
maloneleo88 OP |
8
Sunyanzi 2021-02-26 18:27:52 +08:00
@maloneleo88 如果你用 Python 3 的话 ... 我上面的代码只修改两处 ...
xrange 改为 range ... 另单独定义函数 cmp( a, b ) ... 内容为 return ( a > b ) - ( a < b ) 即可 ... 除此之外其他什么都不用动 ... 改语法不改思想 ... 顺带一提自己写的 cmp 和原生的 cmp 还是有些许的区别 ... 但在你的应用场景里可以视为完全一致 ... |
9
IgniteWhite 2021-02-26 19:24:07 +08:00 via iPhone
我以为您在写汇编呢
|
10
maloneleo88 OP |