Python 为什么列表==';已排序';关键字为false
当我检查该列表Python 为什么列表==';已排序';关键字为false,python,list,sorting,Python,List,Sorting,当我检查该列表a=[1,2,3,4,5]的条件时,该列表[1,2,3,2,1,5,4]为“排序”关键字的意思 >> a == sorted >> False 为什么这给了我错误和错误的答案 >>a != sorted >> True 为什么这让我觉得是真的? 在“==”中为假,在“!=”中为真无论列表是否排序您误解了的含义。它是一个返回已排序列表的函数,而不是测试给定列表是否已排序。为了实现这一点,您可以使用类似于a==sorted(a)的方法
a=[1,2,3,4,5]
的条件时,该列表[1,2,3,2,1,5,4]
为“排序”关键字的意思
>> a == sorted
>> False
为什么这给了我错误和错误的答案
>>a != sorted
>> True
为什么这让我觉得是真的?
在“==”中为假,在“!=”中为真无论列表是否排序您误解了的含义。它是一个返回已排序列表的函数,而不是测试给定列表是否已排序。为了实现这一点,您可以使用类似于
a==sorted(a)
的方法,sorted()
函数获取一个列表并将其排序后返回
因此,您应该将您的列表与该列表的“排序版本”进行比较,以查看它是否最初已排序
例如
请注意,当您在内存中生成一个新的排序版本时,这对于长列表来说是缓慢的。相反,您可以编写一个过程来检查每个元素是否大于上一个元素。这将更有效率。
排序
是Python中的内置函数。列表和函数本质上是不可比较的,因此无论a
中有什么内容,a==sorted
都会返回false,这是很自然的。您可以使用类型
功能进行检查:
>>> print(type([1, 2, 3]))
<class 'list'>
>>> print(type(sorted))
<class 'builtin_function_or_method'>
或者,如果您喜欢不在O(n log n)时间内运行的内容:
all(首先让我们深入了解一下:
sorted
确实是一个关键词,但它不是你想象的那样:
>>> type(sorted)
<class 'builtin_function_or_method'>
然后使用该函数使您的支票如下所示:
>>> is_sorted(a)
>>> True
或将排序后的用于预期用途:
a==sorted(a)
sorted
是一个内置函数,由于列表永远不能等于函数,a==sorted
将始终返回False
。因此,相反的,a!=sorted
将始终返回True
,==sorted
与确定列表是否已排序不同;您需要创建您自己的函数。因为some\u list==sorted
,将您的列表与sorted
函数进行比较,并且由于列表与sorted
不同,它返回False
。请注意sorted
不是关键字,而是一个内置函数,这是不同的。现在很清楚了。。谢谢全部的
>>> type(sorted)
<class 'builtin_function_or_method'>
def is_sorted(a=[]):
prev = a[0]
if len(a)>1:
for item in a[1:]:
if item < prev:
return False
else:
prev=item
return True
>>> is_sorted(a)
>>> True
a==sorted(a)