为了账号安全,请及时绑定邮箱和手机立即绑定

排序时两个列表之间的比较给出了错误的结果

排序时两个列表之间的比较给出了错误的结果

慕侠2389804 2022-06-02 15:21:54
我在 Python 中有一段代码比较两个数字列表(一个由计算机生成,random.sample()一个由用户输入)。我需要知道用户输入的数字列表是否与计算机生成的列表相同(无论每个列表中成员的顺序如何)。所以我得到了:    if list_from_user.sort() == LIST_OF_NUMBERS.sort():        print("yes")    else:        print("no")但无论用户的输入如何,该if块始终导致 True 并始终打印“yes”。我在调试模式下运行它,当它到达if块时,每个列表中有两个完全不同的数字,但结果if仍然是“是”。如果我从比较.sort()中的两个列表中删除该方法,则确实会产生正确的输出,但是两个列表上成员的顺序必须相同才能成为事实,这就是我试图用.ifif .sort()我错过了什么吗?
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

在 Python 中,每个变量都被视为对象。

list_from_userLIST_OF_NUMBERS是两个列表,如果在其.sort()上调用该方法,则它不会返回列表。相反,它会更改原始对象列表。

所以list_from_user.sort() == LIST_OF_NUMBERS.sort() 总会返回True,因为基本上它比较None == None


查看完整回答
反对 回复 2022-06-02
?
精慕HU

TA贡献1845条经验 获得超8个赞

当使用.sort()而不是返回排序列表时,它在排序列表时返回一个值None。IE:


>>> a = [5,3,7]

>>> print(a.sort())

None

>>> print(a)

[3,5,7]

要解决此问题,请在比较之前使用排序,因为比较True同时返回 return None。例如:


import random


list_len = 5

numbers = [0,1,2,3,4,5,6,7,8,9]


LIST_OF_NUMBERS = random.sample(numbers, list_len)

list_from_user = [int(input()) for i in range(list_len)]


comp_nums.sort()

list_from_user.sort()


if list_from_user == LIST_OF_NUMBERS:

    print("yes")

else:

    print("no")


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信