我在 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_user
和LIST_OF_NUMBERS
是两个列表,如果在其.sort()
上调用该方法,则它不会返回列表。相反,它会更改原始对象列表。
所以list_from_user.sort() == LIST_OF_NUMBERS.sort()
总会返回True
,因为基本上它比较None == None
。
精慕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")
添加回答
举报
0/150
提交
取消