如果数字降序返回true

对于以下功能,如果数字降序,我尝试返回True,否则返回false。


“数字”必须为正整数


这是我的代码:


def rev_num_sort(digits):

    n = len(digits)

    for i in range n:

        if digits[i] < digits[i+1]

            return False

    return True

例如


print rev_num_sort(321)

True


print rev_num_sort(123)

False

我知道您不能接受int的长度,并且在运行print语句时遇到此错误,但是我不确定如何在找不到长度的情况下进行计算。


慕标琳琳
浏览 242回答 3
3回答

慕虎7371278

>>> def rev_num_sort(num):...&nbsp; &nbsp; &nbsp;strs = str(num)...&nbsp; &nbsp; &nbsp;return strs == "".join(sorted(strs, reverse=True))...&nbsp;>>> rev_num_sort(321)True>>> rev_num_sort(123)False>>> rev_num_sort(510)True使用zip和any,无需排序:>>> def rev_num_sort(num):...&nbsp; &nbsp; &nbsp;strs = str(num)...&nbsp; &nbsp; &nbsp;return all(int(x) > int(y) for x, y in zip(strs, strs[1:]))...&nbsp;>>> rev_num_sort(321)True>>> rev_num_sort(123)False>>> rev_num_sort(510)True使用itertools.izip和迭代器的内存高效版本:>>> from itertools import izip>>> def rev_num_sort(num):...&nbsp; &nbsp; &nbsp;strs = str(num)...&nbsp; &nbsp; &nbsp;it1 = iter(strs)...&nbsp; &nbsp; &nbsp;it2 = iter(strs)...&nbsp; &nbsp; &nbsp;next(it2)...&nbsp; &nbsp; &nbsp;return all(int(x) > int(y) for x, y in izip(it1, it2))...&nbsp;>>> rev_num_sort(321)True>>> rev_num_sort(123)False>>> rev_num_sort(510)True

慕斯709654

这是一个避免列表复制的短路版本def rev_num_sort(digits):&nbsp; &nbsp; digits = str(digits)&nbsp; &nbsp; # assuming digits is an int/long&nbsp; &nbsp; all(digits[i-1] >= j for i, j in enumerate(digits) if i)

梦里花落0921

def descending(n):&nbsp; &nbsp; prevDplace = False&nbsp; &nbsp; while n > 0:&nbsp; &nbsp; &nbsp; &nbsp; n *= 0.1&nbsp; &nbsp; &nbsp; &nbsp; currDplace = n%1&nbsp; &nbsp; &nbsp; &nbsp; n = n - currDplace&nbsp; &nbsp; &nbsp; &nbsp; if prevDplace:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if prevDplace > currDplace:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prevDplace = currDplace&nbsp; &nbsp; return Truedef rev_num_sort(digits):&nbsp; &nbsp; digits = str(digits)&nbsp; &nbsp; # assuming digits is an int/long&nbsp; &nbsp; all(digits[i-1] >= j for i, j in enumerate(digits) if i)这是基于两者的10000次时间(分别在元组中得出的结果)基于Gnibbler和我的(类似于C先生)的一些性能比较:12344444445667888889999999999999999998888876654444444321descending:(0.48712682723999023, 0.8589978218078613)gnibbler:(0.1695241928100586, 0.69327712059021)我发现这很令人惊讶,字符串方法要快得多!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python