列表中的第一个元素乱序

时间:2014-06-23 20:17:38

标签: python

对于列表[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")

3 个答案:

答案 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])