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

我在 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()


我错过了什么吗?


慕侠2389804
浏览 113回答 2
2回答

湖上湖

在 Python 中,每个变量都被视为对象。list_from_user和LIST_OF_NUMBERS是两个列表,如果在其.sort()上调用该方法,则它不会返回列表。相反,它会更改原始对象列表。所以list_from_user.sort() == LIST_OF_NUMBERS.sort() 总会返回True,因为基本上它比较None == None。

精慕HU

当使用.sort()而不是返回排序列表时,它在排序列表时返回一个值None。IE:>>> a = [5,3,7]>>> print(a.sort())None>>> print(a)[3,5,7]要解决此问题,请在比较之前使用排序,因为比较True同时返回 return None。例如:import randomlist_len = 5numbers = [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")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python