我的问题是,代码正确地过滤了偶数,这是我想要的,但它在七点停止,并且不显示数字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))
答案 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)
答案 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]