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

我正在研究一个问题,该问题确定数字中的数字是否按递增顺序排列。现在,我用来解决问题的方法是,例如,考虑数字 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


皈依舞
浏览 278回答 3
3回答

交互式爱情

您可以简单地检查数字在转换为字符串时是否是 的子字符串'1234567890':str(num) in '1234567890'

杨__羊羊

你可以用一个移位的 self 压缩数字的字符串表示,并一起迭代连续的数字。使用all检查号码跟随,使用模10来处理0的情况。num = 7890 result = all((int(y)-int(x))%10 == 1 for x,y in zip(str(num),str(num)[1:]))

陪伴而非守候

我会创建一个循环生成器并切片:from itertools import cycle, islicenum = 5678901234num = 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 //= 10def 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python