3 回答

TA貢獻1802條經(jīng)驗 獲得超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和迭代器的內(nèi)存高效版本:
>>> 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條經(jīng)驗 獲得超5個贊
這是一個避免列表復(fù)制的短路版本
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條經(jīng)驗 獲得超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次時間(分別在元組中得出的結(jié)果)基于Gnibbler和我的(類似于C先生)的一些性能比較:
1234444444566788888999999999
9999999998888876654444444321
descending:
(0.48712682723999023, 0.8589978218078613)
gnibbler:
(0.1695241928100586, 0.69327712059021)
我發(fā)現(xiàn)這很令人驚訝,字符串方法要快得多!
添加回答
舉報