Python中的升序

时间:2018-09-21 15:02:44

标签: python

如果列表编号按升序排列,我试图使该代码将True与变量is_ascending关联,否则将其与False关联

for i in range(2, len(numbers)) :
if numbers[i] < numbers[i-1] :
    is_ascending = False
    break
else :
    is_ascending = True

但是我正在做的程序,这是针对一个类的,说这是行不通的。任何帮助将不胜感激

4 个答案:

答案 0 :(得分:2)

您应使用range(1, len(numbers)),因为1表示第二个元素和0索引将引用第一个元素。除此之外,您的if-else语句应位于for循环内(缩进问题)。您的代码对未排序列表和已排序列表的工作方式如下。尝试使用 numbers = [1,2,3,4,5],它将打印True

numbers = [1,2,4,3,5]

for i in range(1, len(numbers)):
    if numbers[i] < numbers[i-1]:
        is_ascending = False
        break
    else:
        is_ascending = True

print (is_ascending)        
> False

答案 1 :(得分:2)

Bazingaa的答案很好,而且对不熟悉函数式编程的人们也更具可读性。您还有两点可以改进。

  • 您可以遍历range(len(numbers) - 1)并将每个元素与下一个而不是前一个进行比较。这是个人喜好,但我发现它比range的两参数表示法更直观。
  • 您可以按照以下答案使用all函数:https://stackoverflow.com/a/3755251/2813263

它会给你这样的东西

is_ascending = all(numbers[i] <= numbers[i+1] for i in range(len(numbers) - 1))

答案 2 :(得分:1)

if sorted(numbers) == numbers:
    is_ascending = True

那样就可以了。

答案 3 :(得分:1)

如果您建立配对比较结果的列表:

numbers = [10,20,30,40,20,50]
outcomes = [ numbers[i] > numbers[i-1] for i in range(1,len(numbers))]
print(outcomes)

这将输出:

[True, True, True, False, True]

错误是针对40和20的比较。

然后您可以使用all()确定列表是否按升序排列

numbers = [10,20,30,40,50,60]
is_ascending = all([ numbers[i] > numbers[i-1] for i in range(1,len(numbers)) ])
print(is_ascending) # prints True
numbers = [10,5,20,30,40,50,60]
is_ascending = all([ numbers[i] > numbers[i-1] for i in range(1,len(numbers)) ])
print(is_ascending) # prints False