我想只返回列表中的奇数

时间:2017-01-16 12:14:16

标签: python

我的问题是,代码正确地过滤了偶数,这是我想要的,但它在七点停止,并且不显示数字9,这是我期望它做的。我试过检查我的代码,但我似乎无法找到问题

def remove_even(numbers) :
    new_list = []
    for i in range(0,len(numbers)-1) :
        if i % 2 != 0 :
            new_list.append(i)
    return new_list
l = [1,2,3,4,5,6,7,8,9,10]
print(remove_even(l))

9 个答案:

答案 0 :(得分:3)

您应该直接遍历您的值而不是索引

for i in numbers:

否则,如果您想使用range,则必须为list

编入索引
for i in range(0, len(numbers)):
    if numbers[i] % 2 != 0 :
        new_list.append(numbers[i])

为简洁起见,列表推导非常适合此类任务

>>> new_list = [num for num in l if num % 2 == 1]
>>> new_list
[1, 3, 5, 7, 9]

答案 1 :(得分:3)

[k for k in l if k %2]

是一个简单的list comprehension返回

[1, 3, 5, 7, 9]

答案 2 :(得分:0)

这是因为你从0开始你的for循环的range()函数,结束于len(数字)-1(在你的情况下是9),python range()已经运行到end-1:

例如:

for i in range(0,9):
    print(i)

将打印否: 0 1 2 3 4 五 6 7 8

这就是为什么你的9不在输出中的原因。

你不必从0开始你的循环。 如果你从0开始,你可以安排你的for循环:

1)

for i in range(0, len(numbers)+1)

2)或者你可以像更多pythonic方式编码。

def remove_even(numbers) :
    new_list = []
    for i in numbers :
        if i % 2 != 0 :
            new_list.append(i)
    return new_list

答案 3 :(得分:0)

#simpliest way of doing it
mylist = [1,2,3,4,5,6,7,8,9,10,11]
for x in mylist:
    if x % 2 == 1: #this displays odd numbers
        print(x)

答案 4 :(得分:0)

您可以使用filter内置功能来更轻松地做到这一点:

list(filter(lambda x: x % 2, l))
[1, 3, 5, 7, 9]

它将仅保留条件评估为True的元素

答案 5 :(得分:-1)

numbers = [1,2,3,4,5,6,7,8,9,10]

odds = [i for i in numbers if i%2!=0]

答案 6 :(得分:-1)

def奇数编号(n):返回[如果x%2 == 1,则x表示范围(1,n + 1)中的x] print(odd_numbers(5))#应打印[1、3、5]

答案 7 :(得分:-1)

def remove_even(numbers) :
    new_list = []
    for i in range(0,len(numbers)-1) :
        if i % 2 != 0 :
            new_list.append(i)
    return new_list 

l = [1,2,3,4,5,6,7,8,9,10] 
print(remove_even(l))

你在金钱上得到了正确的算法。您只需将 -1 更改为 +1,即可获得您想要的结果。

如果只更改一项,为什么要更改逻辑算法。

答案 8 :(得分:-2)

使用列表理解很简单:

def odd_no(n):
      return [x for x in range(n+1) if n%2==1]