为什么列表==“排序”关键字给出错误的

时间:2018-11-12 19:21:13

标签: python list sorting

当我检查此列表a = [1,2,3,4,5]和此列表[1,2,3,2,1,5,4]到'sorted'关键字的条件时,表示

>> a == sorted
>> False

为什么这会给我False和

>>a != sorted
>> True

这为何使我成真? 不管列表是否排序,在'=='中给出false,在'!='中给出true

4 个答案:

答案 0 :(得分:3)

a == sorted(a)函数获取列表并返回排序后的列表。

因此,您应该将列表与该列表的“排序版本”进行比较,以查看其最初是否已排序。

例如

sorted()

请注意,对于长列表而言,这很慢,因为您正在内存中生成新的排序版本。相反,您可以编写一个过程来检查每个元素是否大于前一个元素。这样会更有效率。

答案 1 :(得分:3)

tensorflow gpu是Python中的内置函数。列表和函数本质上是无法比拟的,因此无论sorted中的内容如何,​​a == sorted都会返回false。您可以使用a函数进行检查:

type

如果您要检查>>> print(type([1, 2, 3])) <class 'list'> >>> print(type(sorted)) <class 'builtin_function_or_method'> 的“排序”,则可以执行以下操作:

a

或者,如果您希望某些不在O(n log n)时间内运行的东西:

a == sorted(a)

答案 2 :(得分:1)

您误解了sorted的含义。它是一个返回排序列表的函数,而不是对给定列表是否排序的测试。为此,您可以使用<div class=container> <div class="row"> <div class="column one-half">1/2</div> <div class="column one-fourth">1/4</div> <div class="column one-eighth">1/8</div> <div class="column one-eighth">1/8</div> </div> <div class="row"> <div class="column one-half offset-half"></div> <div class="column one-half">1/2</div> </div> <div class="row"> <div class="column one-half offset-one-fourth"></div> <div class="column one-fourth">1/4</div> <div class="column one-fourth">1/4</div> <div class="column one-fourth">1/4</div> </div> </div>

之类的东西

答案 3 :(得分:1)

让我们深入了解一下:

sorted的确是一个关键字,但它不是您想的那样:

>>> type(sorted)
<class 'builtin_function_or_method'>

因此此表达式>>> a == sorted会检查您的列表a是否与此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

或将sorted用于预期目的:

a==sorted(a)