0

Using List Comprehension I want to Print odd even with string indicating "Even" for even numbers and "Odd for odd numbers

Using below code - I am getting only even and odd. Just wondering if i can get both values and corresponding to them stating even/odd.

obj = ["Even" if i%2==0 else "odd" for i  in range(20)] 
print(obj)

Using List comprehension only.

eyllanesc
  • 235,170
  • 19
  • 170
  • 241

5 Answers5

2

I just took your own code and just concatenate string to your result. You did it correctly.

>>> obj = [f"{i} is Even" if i%2==0 else f"{i} is odd" for i  in range(20)]
>>> print('\n'.join(obj))
0 is Even
1 is odd
2 is Even
3 is odd
4 is Even
5 is odd
6 is Even
7 is odd
8 is Even
9 is odd
10 is Even
11 is odd
12 is Even
13 is odd
14 is Even
15 is odd
16 is Even
17 is odd
18 is Even
19 is odd

There is lot of string concatenate methods in python, you can refer more about from this Which is the preferred way to concatenate a string in Python? question. I used Python f'strings here.

Kushan Gunasekera
  • 7,268
  • 6
  • 44
  • 58
1

Sure.

obj = [(i,"even" if i%2==0 else "odd") for i in range(20)]
print(obj)

[(0, 'even'), (1, 'odd'), (2, 'even'), (3, 'odd'), (4, 'even'), (5, 'odd'), (6, 'even'), (7, 'odd'), (8, 'even'), (9, 'odd'), (10, 'even'), (11, 'odd'), (12, 'even'), (13, 'odd'), (14, 'even'), (15, 'odd'), (16, 'even'), (17, 'odd'), (18, 'even'), (19, 'odd')]

Or, if you prefer, even as dict:

obj = {i:"even" if i%2==0 else "odd" for i in range(20)}
print(obj)

{0: 'even', 1: 'odd', 2: 'even', 3: 'odd', 4: 'even', 5: 'odd', 6: 'even', 7: 'odd', 8: 'even', 9: 'odd', 10: 'even', 11: 'odd', 12: 'even', 13: 'odd', 14: 'even', 15: 'odd', 16: 'even', 17: 'odd', 18: 'even', 19: 'odd'}

Finomnis
  • 18,094
  • 1
  • 20
  • 27
0
obj = ["Even" if i%2==0 else "odd" for i in range(20)]
print(list(enumerate(obj))) # [(0, 'Even'), (1, 'odd'), (2, 'Even'), (3, 'odd'), (4, 'Even'), (5, 'odd'), (6, 'Even'), (7, 'odd'), (8, 'Even'), ...

or:

obj = ["Even" if i%2==0 else "odd" for i in range(20)]

for key,value in enumerate(obj):
    print ("{} is {} number".format(key,value))

output:

0 is Even number
1 is odd number
2 is Even number
3 is odd number
4 is Even number
5 is odd number
6 is Even number
7 is odd number
8 is Even number
9 is odd number
10 is Even number
11 is odd number
12 is Even number
13 is odd number
14 is Even number
15 is odd number
16 is Even number
17 is odd number
18 is Even number
19 is odd number
ncica
  • 7,015
  • 1
  • 15
  • 37
0

You could try using tuples:

obj = [(i, "Even") if i%2==0 else (i, "odd") for i in range(20)] 
print(obj)
ales_t
  • 1,967
  • 11
  • 10
0
print('\n'.join(str(i) + {0:' is even', 1:' is odd'}[i&1] for i in range(20)))

Or:

from itertools import cycle

c = cycle([' is even', ' is odd'])
print('\n'.join(str(i) + msg for i, msg in zip(range(20), c)))

Prints:

0 is even
1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even
11 is odd
12 is even
13 is odd
14 is even
15 is odd
16 is even
17 is odd
18 is even
19 is odd
Andrej Kesely
  • 168,389
  • 15
  • 48
  • 91