为啥排序列表返回无? [复制]

Posted

技术标签:

【中文标题】为啥排序列表返回无? [复制]【英文标题】: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))。为什么不对数字进行排序,它们将它们映射到字符串?否则,您将不得不将密钥功能指定为sort:wiki.python.org/moin/HowTo/Sorting#Key_Functions @JulienD 非常感谢!完成! 【参考方案1】:

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

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

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

【讨论】:

以上是关于为啥排序列表返回无? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在将项目附加到现有列表时会得到“无”项目? [复制]

简单的 Python 问题:为啥我不能将变量分配给排序列表(就地)? [复制]

为啥 append 方法在我的列表中返回 None ? [复制]

为啥 foo = filter(...) 返回一个 <filter object>,而不是一个列表? [复制]

Jquery 可排序列表不会序列化,为啥?

为啥 for 循环不遍历列表中的每个项目?