【问题标题】:Return Decending Integer返回递减整数
【发布时间】:2018-03-18 13:26:05
【问题描述】:

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

我一开始是这样的:

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

因为测试只有降序的数字;有点俗气,但它起作用了。现在我想做一个任意数字,并让它返回最大到最小的数字。

如您所见,我试图将 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))

【问题讨论】:

  • 您只需按升序对数字进行排序,然后将其反转即可。这样,您将获得可以与给定数字组成的最大数字。
  • b.sort(key=lambda x: int(x), reverse=True)

标签: python logic


【解决方案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'

【讨论】:

    【解决方案2】:

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

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

    我们所做的是计算每个数字出现的次数。然后,我们构造一个与原始数字一样多的 9,然后是 8……直到 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()
    

    【讨论】:

    • 你的函数和我的函数定时了吗?
    • 另外,python 是一种高级语言,所以最好推广一下库魔法。
    • Python 是一种高级语言,但我们仍应注意程序的扩展方式。 Timsort 在 O(n log n) 最坏情况和平均情况下运行,而计数排序在 O(n) 最坏和平均情况下运行。我对这两个函数进行了计时,对于最大 100000 的输入,内置排序运行得更快。但内置排序可能依赖于真正的、快速的数组而不是列表等。
    • 我想我的观点是,当有人学习编码时,学习如何正确处理问题并构建好的解决方案比知道如何调用库更重要。跨度>
    【解决方案3】:

    一个不错的单行(基本上和上面一样:变成一个字符串,反向排序,回到int):

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

    【讨论】:

    • 正如 OP 提到的那样,他们是新手(至少对 python 而言),提供单行代码不会教他们良好的代码编写礼仪,并且会使他们不清楚代码,尤其是没有任何排序解释
    • @LeviLesches 我建议你阅读一些python conventions :)
    • @GiantsLoveDeathMetal 是的,我不以可读性着称;我的座右铭是:“一切都在一条线上!”
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2018-10-10
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多