【问题标题】:Why does sorting a list return None? [duplicate]为什么排序列表返回无? [复制]
【发布时间】:2017-06-29 09:40:20
【问题描述】:

我的代码是用 python 3 编写的,用于打印回文。 它应该遍历所有 2 个 3 位数字的回文乘积,如下所示:

mylist=[]
for i in range(999,99,-1):
    for x in range(999, i-1, -1,):
        number=i*x
        number=str(number)
        if number==number[::-1]:
            #print(number)         
            mylist.append(number)
mylist=mylist.sort(reverse=True)
print(mylist)

注意注释掉的打印。当这还在的时候,所有应该打印出来的回文都出来了。 当我运行我的代码时,如果没有 print 语句,控制台只会打印出“无”。

据我所知,我的逻辑是有序的,那么为什么会发生这种情况? 编辑: 此外,当我以相反的顺序对列表进行排序时,99999 排在第一位。我认为这是因为 python 查看连续的 9 并认为它是最大的。 但是,有没有一种简单的方法可以获得实际最大的数字?

【问题讨论】:

  • 您将mylist 绑定到调用.sort 的结果,这是一个返回None 的就地操作。只需mylist.sort(reverse=True)
  • @Shawn Li 不确定您在编辑中的意思,但数字默认按数字递增顺序排序,但您添加了reverse=True,这会将最大的数字放在第一位 - 因为好吧,它实际最大的数字。
  • @JulienD 它们不是按数字顺序排序的,因为 99999 排在第一位,但是诸如 101101 之类的数字大于 99999。所以我的意思是,您能否将数字上最大的数字设为最接近无穷大的数字,先来?
  • @Shawn Li 我明白了。您正在对字符串进行排序 (number=str(number))。为什么不对数字进行排序,它们将它们映射到字符串?否则,您将不得不将密钥功能指定为sortwiki.python.org/moin/HowTo/Sorting#Key_Functions
  • @JulienD 非常感谢!完成!

标签: python python-3.x reverse palindrome


【解决方案1】:

list.sort() 总是返回 None (列表就地排序)。你想要的是sorted(list),它返回一个新的排序列表。

然后你可以像这样对它们进行排序:

mylist = [int(x) for x in mylist]
mylist.sort(reverse=True)
mylist = [str(x) for x in mylist]

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2017-04-03
    • 2021-06-18
    • 2011-12-14
    • 2020-04-22
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多