如果列表编号按升序排列,我试图使该代码将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
但是我正在做的程序,这是针对一个类的,说这是行不通的。任何帮助将不胜感激
答案 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