Python 我只想返回列表中的奇数

Python 我只想返回列表中的奇数,python,list,Python,List,我这里的问题是,代码正确地过滤掉偶数,这是我想要的,但是它在7处停止,并且不显示数字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处停止,并且不显示数字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))

你应该直接循环你的值,而不是索引

for i in numbers:
否则,如果您想使用范围,则必须将其索引到列表中

为简洁起见,列表理解非常适合这种类型的任务

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

你应该直接循环你的值,而不是索引

for i in numbers:
否则,如果您想使用范围,则必须将其索引到列表中

为简洁起见,列表理解非常适合这种类型的任务

>>> new_list = [num for num in l if num % 2 == 1]
>>> new_list
[1, 3, 5, 7, 9]
是一个简单的返回

[1, 3, 5, 7, 9]
是一个简单的返回

[1, 3, 5, 7, 9]

这是因为您正在从0开始for循环的range函数,并在lennumbers-1结束,在您的例子中,lennumbers-1是9,python range将一直运行到end-1:

例如:

for i in range(0,9):
    print(i)
将打印“否”: 0 1. 2. 3. 4. 5. 6. 7. 八,

这就是为什么输出中没有9

您不必从0开始循环。 如果从0开始,可以按如下方式安排for循环:

一,

或者,您可以像python一样编写代码

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

这是因为您正在从0开始for循环的range函数,并在lennumbers-1结束,在您的例子中,lennumbers-1是9,python range将一直运行到end-1:

例如:

for i in range(0,9):
    print(i)
将打印“否”: 0 1. 2. 3. 4. 5. 6. 7. 八,

这就是为什么输出中没有9

您不必从0开始循环。 如果从0开始,可以按如下方式安排for循环:

一,

或者,您可以像python一样编写代码

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

def odd_numbersn:return[x代表范围1中的x,n+1如果x%2==1]printodd_numbers5应该打印[1,3,5]

def odd_numbersn:return[x代表范围1中的x,n+1如果x%2==1]printodd_numbers5应该打印[1,3,5]

使用列表理解很简单:

def奇数_非: 如果n%2==1,则返回[x代表范围n+1中的x]
使用列表理解很简单:

def奇数_非: 如果n%2==1,则返回[x代表范围n+1中的x]
使用过滤器内置功能,您可以更轻松地执行此操作:

list(filter(lambda x: x % 2, l))

它将只保留条件计算为True的元素

使用过滤器内置功能可以更轻松地执行此操作:

list(filter(lambda x: x % 2, l))
它将只保留条件计算为True的元素

你的算法是正确的。所有你需要改变的是-1到+1,你会得到你想要的结果

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

你的算法是正确的。所有你需要改变的是-1到+1,你会得到你想要的结果


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

请在询问之前检查是否使用列表理解创建列表。no_偶数=[x代表范围内的x如果x%2!=0]在索引中循环,则需要将循环内的i替换为数字[i]。另请参见在Python中使用递归执行此任务是疯狂的。递归地这样做的唯一原因是作为递归中的一个练习,我怀疑OP还没有达到那个阶段。请在询问之前检查一下,使用列表理解来创建您的列表。no_偶数=[x代表范围内的x如果x%2!=0]在索引中循环,则需要将循环内的i替换为数字[i]。另请参见在Python中使用递归执行此任务是疯狂的。递归执行此操作的唯一原因是作为递归的练习,我怀疑OP还没有到那个阶段。您描述的两个方法一点也不等效。您描述的两个方法一点也不等效。不起作用:不起作用:这不是有效的python。这不是有效的python。问题已经得到解答。迭代范围而不是数字不是正确的解决方案。问题已经解决了。迭代范围而不是数字不是正确的解决方案。
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))