对于列表[1,4,6,8,2,10]
,它应返回2
对于列表[1,6,7,9,3,10]
,它应返回3
它应该返回第一个小于最后一个的数字,首先是错误的顺序。
我该怎么办?这就是我写的,有两个版本。我一整天都在工作但没有成功。
#1版
def out_of_order(lst):
for a in range(0,len(lst)):
for b in range(a+1,len(lst)):
if(b<a):
print(b)
break
else:
print("none")
#2版
def out_of_orders(lst):
for a,b in zip(lst,lst[1:]):
if(b<a):
print(b)
break
else:
print("none")
答案 0 :(得分:2)
只需将最后一个选中的元素保留在列表中,然后检查列表中的当前元素是否较小。
def out_of_order(lst):
before = 0
for y in lst:
if y < before:
return y
before = y
print(out_of_order([1,4,6,8,2,10]))
print(out_of_order([1,6,7,9,3,10]))
答案 1 :(得分:0)
您的第二个版本已经正确 - 您只需要返回值而不是打印它:
def out_of_orders(lst):
for a, b in zip(lst, lst[1:]):
if b < a:
return b
答案 2 :(得分:0)
请参阅Christian Berendt的答案以获得更快的解决方案。
您的第一个代码最重要的问题是它应该检查lst[a]
而不是a
。修复:
def out_of_order(lst):
for a in range(0,len(lst)):
for b in range(a+1,len(lst)):
if(lst[b]<lst[a]):
print(lst[b])
return
print("none")
out_of_order([1,6,7,9,3,10])