当我运行此代码时,它什么也不会打印? 我试图将大于小于的值反转,但这无济于事。
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')
答案 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
。您需要try
和except
,因为如果有错误,如果它在最后一个数字上,它将被忽略。您还需要将i > numbers[i+1]
更改为i > numbers[numbers.index(i)+1]
,因为要获取下一个数字,我们需要在索引中添加1,而不是值。