【发布时间】:2020-06-03 23:04:20
【问题描述】:
当我遇到一个奇怪的行为时,我正在解决一个关于黑客等级的问题。
以下两段代码生成的列表应该相同。
#array is list containing random elements
#method 1
array1 = list(set(sorted(array)))
#method 2
array2 = sorted(set(array))
#Hence following line of code should return True
array1 == array2
但是,根据列表的大小,答案会有所不同。 如果列表的大小很小,比如说 10 个元素,那么该行代码返回 True。但是,如果列表足够长,则该语句返回 False。
我想了解幕后发生的事情,从逻辑上讲,这两种情况的答案都应该是正确的。
示例 1:
In [60]: array
Out[60]: [9, 8, 5, 0, 2, 6, 7, 5, 1, 3]
In [61]: sorted(set(array)) == list(set(sorted(array)))
Out[61]: True
示例 2:
In [103]: import requests
In [104]: link = "https://hr-testcases-us-east-1.s3.amazonaws.com/70945/input02.txt?AWSAccessKeyId=AKIAJ4WZFDFQTZRGO3QA&Expires=1591229125&Signature=ocC7OZJJVIxAI00bzLNu73T%2BZTk%3D&response-
...: content-type=text%2Fplain"
In [105]: ipstring = requests.get(link).content.decode("utf-8")
In [106]: a = list(map(int, ipstring.split("\n")[2].split()))
In [107]: sorted(set(a)) == list(set(sorted(a)))
Out[107]: False
【问题讨论】:
-
@juanpa.arrivillaga 我给出了最小可重复的例子。请阅读问题中提供的示例
-
@juanpa.arrivillaga 我已经更新了问题,感谢您的指导!
标签: python python-3.x sorting set