3 回答

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

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)

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)
我发现这很令人惊讶,字符串方法要快得多!
添加回答
举报