Print the odd number using list comprehension

Question:

The question is :

The odd_numbers function returns a list of odd numbers between 1 and
n, inclusively. Fill in the blanks in the function, using list
comprehension. Hint: remember that list and range counters start at 0
and end at the limit minus 1.

def odd_numbers(n):
    return [x for x in ___ if ___]

print(odd_numbers(5))  # Should print [1, 3, 5]
print(odd_numbers(10)) # Should print [1, 3, 5, 7, 9]
print(odd_numbers(11)) # Should print [1, 3, 5, 7, 9, 11]
print(odd_numbers(1))  # Should print [1]
print(odd_numbers(-1)) # Should print []

And this is my code :

def odd_numbers(n):
    return [x for x in range(0, n) if x%2 != 0]

print(odd_numbers(5))  # Should print [1, 3, 5]
print(odd_numbers(10)) # Should print [1, 3, 5, 7, 9]
print(odd_numbers(11)) # Should print [1, 3, 5, 7, 9, 11]
print(odd_numbers(1))  # Should print [1]
print(odd_numbers(-1)) # Should print []

The output of my code said :

Here is your output:
[1, 3] [1, 3, 5, 7, 9] [1, 3, 5, 7, 9] [] []

Not quite, odd_numbers(5) returned [1, 3] instead of [1, 3, 5].
Remember that list comprehensions let us use a conditional clause.
What’s the condition to determine whether a number is odd or even?

i dont know which part i should add in my code, this python is new for me, can you help me?

Asked By: user14948921

||

Answers:

you need to change the range to take the n also.

def odd_numbers(n):
    return [x for x in range(0, n+1) if x%2 != 0]
Answered By: RCvaram
def odd_numbers(n):
    return [x for x in range(1, n+1) if x % 2 ==1]
Answered By: papi.chulo69999

This is correct, too, specifying a step to the range:

def odd_numbers(n):
    return [x for x in range(1, n+1, 2) if x % 1 == 0]
Answered By: cynosure1
def odd_numbers(n):
    return [x for x in range(0,n+1) if x%2 > 0 ]

This worked for me as well but I’m not sure which is best practice when testing for an odd value (!= 0 or > 0). So which option is best practice?

Answered By: That Guy Eli

Instead of losing one iteration as proposed previously by starting from 0 as in:

def odd_numbers(n):
    return [x for x in range(0, n+1) if x % 2 != 0]

start from 1 to speed up:

def odd_numbers(n):
    return [x for x in range(1, n+1) if x % 2 != 0]
def odd_numbers(n):
    return [x for x in range(1,n+1) if x % 2 ==1]

print(odd_numbers(5))  # Should print [1, 3, 5]
print(odd_numbers(10)) # Should print [1, 3, 5, 7, 9]
print(odd_numbers(11)) # Should print [1, 3, 5, 7, 9, 11]
print(odd_numbers(1))  # Should print [1]
print(odd_numbers(-1)) # Should print []
Answered By: ADigraj

this also works

def odd_numbers(n):
    return [x for x in range(0, n+1) if x % 2 == 1]
Answered By: Dave
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.