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

如果数字降序返回true

如果数字降序返回true

慕标琳琳 2021-04-01 15:11:17
对于以下功能,如果数字降序,我尝试返回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)Trueprint rev_num_sort(123)False我知道您不能接受int的长度,并且在运行print语句时遇到此错误,但是我不确定如何在找不到长度的情况下进行计算。
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

>>> def rev_num_sort(num):

...     strs = str(num)

...     return strs == "".join(sorted(strs, reverse=True))

... 

>>> rev_num_sort(321)

True

>>> rev_num_sort(123)

False

>>> rev_num_sort(510)

True

使用zip和any,无需排序:


>>> def rev_num_sort(num):

...     strs = str(num)

...     return all(int(x) > int(y) for x, y in zip(strs, strs[1:]))

... 

>>> 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):

...     strs = str(num)

...     it1 = iter(strs)

...     it2 = iter(strs)

...     next(it2)

...     return all(int(x) > int(y) for x, y in izip(it1, it2))

... 

>>> rev_num_sort(321)

True

>>> rev_num_sort(123)

False

>>> rev_num_sort(510)

True


查看完整回答
反对 回复 2021-04-05
?
慕斯709654

TA贡献1840条经验 获得超5个赞

这是一个避免列表复制的短路版本


def rev_num_sort(digits):

    digits = str(digits)    # assuming digits is an int/long

    all(digits[i-1] >= j for i, j in enumerate(digits) if i)


查看完整回答
反对 回复 2021-04-05
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

def descending(n):

    prevDplace = False

    while n > 0:

        n *= 0.1

        currDplace = n%1

        n = n - currDplace

        if prevDplace:

            if prevDplace > currDplace:

                return False

        else:

            prevDplace = currDplace

    return True



def rev_num_sort(digits):

    digits = str(digits)    # assuming digits is an int/long

    all(digits[i-1] >= j for i, j in enumerate(digits) if i)

这是基于两者的10000次时间(分别在元组中得出的结果)基于Gnibbler和我的(类似于C先生)的一些性能比较:


1234444444566788888999999999

9999999998888876654444444321

descending:


(0.48712682723999023, 0.8589978218078613)

gnibbler:


(0.1695241928100586, 0.69327712059021)

我发现这很令人惊讶,字符串方法要快得多!


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号