list.reverse()没有给出正确的输出

时间:2018-09-06 15:34:26

标签: python list reverse

问题: 编写一个接受两个正整数a和b(a小于b)并返回一个列表的函数,该列表包含a和b之间的所有奇数(包括a和b,如果适用),其降序排列。

程序:

def odd(a,b):
    c=[]
    for i in range(a,b+1):
        if i%2==1:
            c.append(i)
            c.sort()
            c.reverse()
        return c

说明: 仅当我使用 c.sort 然后反转它时,我才能获得正确的输出。但是c.reverse应该给出正确的输出,对吗?当我“不排序”并反转列表时,尽管元素按排序顺序输入了列表,但输出列表的排序不正确。谁能解释我为什么?

2 个答案:

答案 0 :(得分:1)

其他人指出了你的错误。我想提供一个性能更高的解决方案:

def odd(a,b):
    return list(range(b if b%2 else b-1,a-1,-2))

print(odd(1,10))
print(odd(1,11))

结果:

[9, 7, 5, 3, 1]
[11, 9, 7, 5, 3, 1]

它使用range并反向进行2步,并确保它以奇数开头。

答案 1 :(得分:0)

可以在循环之后而不是循环的每个迭代之后调用

list.append()。 return语句也应该在循环之外。

def odd(a,b):
    c=[]
    for i in range(a,b+1):
        if i%2==1:
            c.append(i)
    c.reverse()
    return c

print(odd(1,10))

# Returns   [9, 7, 5, 3, 1]