有人可以帮我解决此列表排序代码吗?

时间:2020-11-06 17:50:24

标签: python

当我运行此代码时,它什么也不会打印? 我试图将大于小于的值反转,但这无济于事。

def is_sorted(numbers):
    ''' Return whether or not the list of numbers is sorted '''

    for i in numbers:
        if numbers[i] < numbers[i + 1]:
            print('True')
        else:
            print('False')

2 个答案:

答案 0 :(得分:0)

for i in numbers在这种情况下,i是每个数字本身,不是是每个数字的索引。那将是for i in range(len(numbers)),尽管之后[i + 1]会在上一次迭代中超出范围。

作为一种选择,我将简化该函数,以通过将列表的一个切片与另一个偏移一个的切片相对,将每个元素与下一个元素进行比较。通过将其写为all中的生成器表达式,这将在命中第一个False

时短路
def is_sorted(numbers):
    return all(i <= j for i, j in zip(numbers, numbers[1::]))

例如

>>> is_sorted([1,3,5,7])
True
>>> is_sorted([1,6,2,7,3])
False

答案 1 :(得分:0)

类似的事情应该起作用:

def is_sorted(numbers):
    isSorted = True
    for i in numbers:
        try:
            if i > numbers[numbers.index(i)+1]:
                isSorted = False
        except:
            pass
    return isSorted
    
print(is_sorted([1,2],3,9,3))

您应该添加变量isSorted,因为如果使用i > next number,它将打印False,但是如果使用i < next number,则将打印True。您需要tryexcept,因为如果有错误,如果它在最后一个数字上,它将被忽略。您还需要将i > numbers[i+1]更改为i > numbers[numbers.index(i)+1],因为要获取下一个数字,我们需要在索引中添加1,而不是值。