为了账号安全,请及时绑定邮箱和手机立即绑定

检查数字中的数字是否在python中按递增顺序排列

检查数字中的数字是否在python中按递增顺序排列

皈依舞 2021-11-23 19:51:21
我正在研究一个问题,该问题确定数字中的数字是否按递增顺序排列。现在,我用来解决问题的方法是,例如,考虑数字 5678。要检查是否是5678的递增序列,我把第一位和下一位和最后一位数字是5,6,8在范围内的功能替代 range(first,last,(diff of first digit and the next to first digit))即range(5,8+1,abs(5-6))。结果是数字的升序排列对于这个问题,有一个约束说For incrementing sequences, 0 should come after 9, and not before 1, as in 7890.现在我的程序在输入 7890 处中断。我不知道如何编码这个逻辑。有人能帮助我吗?。增加序列的代码是  len(set(['5','6','7','8']) - set(map(str,range(5,8+1,abs(5-6))))) == 0
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

您可以简单地检查数字在转换为字符串时是否是 的子字符串'1234567890'

str(num) in '1234567890'


查看完整回答
反对 回复 2021-11-23
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

你可以用一个移位的 self 压缩数字的字符串表示,并一起迭代连续的数字。使用all检查号码跟随,使用模10来处理0的情况。

num = 7890
result = all((int(y)-int(x))%10 == 1 for x,y in zip(str(num),str(num)[1:]))


查看完整回答
反对 回复 2021-11-23
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我会创建一个循环生成器并切片:


from itertools import cycle, islice


num = 5678901234


num = tuple(str(num))

print(num == tuple(islice(cycle(map(str, range(10))), int(num[0]), int(num[0]) + len(num))))

这比检查单个数字之间差异的解决方案更快。当然,你可以牺牲长度来让它更快:


def digits(num):

    while num:

        yield num % 10

        num //= 10


def check(num):

    num = list(digits(num))

    num.reverse()

    for i, j in zip(islice(cycle(range(10)), num[0], num[0] + len(num)), num):

        if i != j:

          return False

    return True


查看完整回答
反对 回复 2021-11-23
  • 3 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信