返回降序整数

时间:2018-03-18 02:28:49

标签: python logic

尝试取整数并将其作为降序整数从函数返回。

我首先是这样做的:

def Descending_Order(num):
    n = str(num)
    return(int(n[::-1]))

因为测试只有数字按降序排列;有点cheezy但嘿它工作..现在我想做一个任何数字的数字,并使其返回从最大到最小的数字。

正如你所看到的,我试图将int转换为字符串(n)并像我想的那样操纵它。

EG:

1201将返回2110

def Descending_Order(num):
    n = str(num)
    i = 0
    swap = 0

    while i < len(n):
        if i+1>len(n):
            break
        elif n[i] < n[i+1]:
            swap = n[i]
            n[i]= n[i+1]
            n[i+1]=swap
            i+=1
        else:    
            i+=1
    return(n)

print(Descending_Order(1201))

3 个答案:

答案 0 :(得分:1)

字符串是可迭代的,因此您可以将它们传递到sorted,如下所示:

def largest_number(num):
    num = str(num)
    ordered = ''.join(sorted(num, reverse=True))
    return int(ordered)

largest_number(87491)
>> 98741

sorted会返回一个列表,因此sorted('87491', reverse=True)将返回:

['9', '8', '7', '4', '1']

将列表传递到join(链接到连接方法的解释)将返回:

'98741'

答案 1 :(得分:1)

正如其他答案所指出的,这是一个排序问题。您可以使用内置排序功能,但这可能需要(相对)长时间,如果您刚刚开始,编写自己的实现而不是依赖库魔术可能会很好。

因为我们只对0到9之间的整数进行排序,所以我们可以使用比python sorted使用的timsort更快的排序算法。

我们所做的是计算每个数字的出现次数。然后我们构造一个数字,其数量与我们在原始数据中找到的数量相同,然后是8s ......直到0。

def Decending_Order(num):
    arr = [0,0,0,0,0,0,0,0,0,0]
    res = []
    for i in str(num):
        arr[int(i)] += 1
    for i in range(0,9):
        while arr[i] > 0:
            res.append(str(i))
            arr[i] -= 1
    return res.reverse()

答案 2 :(得分:-1)

一个漂亮的单行(基本上与上面相同:变成一个字符串,反向排序,回到int):

def largest_num (num): return int (sorted (str (num), reverse = True))