为啥排序列表返回无? [复制]
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 ? [复制]