
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Print Even Numbers in a List using Python
Python Programming Language is one of the most efficient and user-friendly programming language and have endless uses and applications. Lists declared in Python are analogous to dynamically sized arrays in other programming languages (vector in C++ and ArrayList in Java). A list is simply a collection of items enclosed by [] and separated by commas.
In this tutorial, we will learn about the solution and approach to find out all even numbers in a given list using Python. List is one of the most fundamental data structures in python. They are widely used and they store similar contiguous data. A number is considered even if it divides by 2 evenly, i.e., leaving no remainder.
We will go through three methods to find all even numbers in a list.
Using modulo operator
Using Bitwise and Operator
Checking last digit of the number
Using Modulo Operator
Modulo operator (%) returns the remainder when the first argument is divided by the second one.
Examples
6 % 4 = 2
15 % 4 = 3
27 % 6 = 3
30 % 8 = 6
For a number to be even, its remainder upon dividing by 2 should be 0.
Mathematically, if x % 2 == 0, then x is said to be even.
We can check whether this condition holds for each element in the list and print theoutput.
This approach takes O(N) time, where N is the size of range.
Syntax
x = 7 result = (x % 2 == 0)
Example
In the example below, we have implemented the above approach. We have created a function to filter out all the even numbers in the given list.
def evens(nums_list): # iteration for num in nums_list: # check for remainder if num % 2 == 0: print(num, end=' ') evens([5, 20, 21, 58, 3])
Output
20 58
Using Bitwise and Operator
In this approach we will use the Bitwise And (&) operator. A computer understands binary natively. Any whole number can be represented as bits (0's and 1's), which basically specify which power of 2 we should include and which should be excluded.
Example: 1011 means, going from right to left, 1*(2^0) + 1*(2^1) + 0*(2^2) + 1*(2^3) = 11
Bitwise And operator performs & operation on each bit. This operator returns 1 if both bits are set and 0 otherwise. Example: 0110 & 1010 = 0010
Apart from 2^0-th bit, or the rightmost bit, all other bits are powers of 2, which means summing them will always give an even number. So we can simply check whether the last bit is set or not to determine whether the number is odd or even.
This approach also takes O(N) time, where N is the size of range.
Syntax
x = 7 result = (x & 1 == 0)
Example
In the below example we perform bitwise & with 1 on each number. It will check whether the last bit is set or not. If it is unset that means the number is even.
def evens(nums_list): # iteration for num in nums_list: # check for remainder if num & 1 == 0: print(num, end=' ') evens([5, 20, 21, 58, 3])
Output
20 58
By checking the last digit of the number
By sheer observation we can identify that if a number is even, it must end with 0, 2, 4, 6, or 8. This can be used in along with modulo with 10, as mod 10 gives the last digit of a number.
This approach takes O(N * 5) time, as each element is checked if present in a tuple of size 5.
Examples
12345 % 10 = 5 (odd)
4232 % 10 = 2 (even)
Syntax
x = 7 result = x % 10 in (0, 2, 4, 6, 8)
Example
We use ?in' keyword here for a quick look-up in the tuple. A set can also be used which provides constant loop-up time.
def evens(nums_list): # iteration for num in nums_list: # check for remainder if num % 10 in (0, 2, 4, 6, 8): print(num, end=' ') evens([5, 20, 21, 58, 3])
Output
20 58
A little Python Bonus
Python contains a built-in function called filter(), which returns an iterator.
It takes two arguments, first is a Boolean function, second is the iterable on which it should be applied. We can use any of the above methods as a function for this.
This approach also takes O(N) time, where N is the size of range.
Special care must be taken where using filter() as it is exhaustible, meaning once it is used, either for traversal or for conversion to list, it will return None if traversed again, so it's better to convert it to a list and store in another variable.
Syntax
evens = filter(lambda x: x % 2 == 0, [5, 20, 21, 58, 3])
Example
In the below example we perform bitwise & with 1 on each number. It will check whether the last bit is set or not. If it is unset that means the number is even.
def evens(nums_list): even_numbers = filter(lambda x: x % 2 == 0, nums_list) for num in even_numbers: print(num, end=' ') evens([5, 20, 21, 58, 3]
Python One Liner using filter()
Example
In the below example we perform bitwise & with 1 on each number. It will check whether the last bit is set or not. If it is unset that means the number is even.
def evens(nums_list): print(*filter(lambda x: x % 2 == 0, nums_list)) evens([5, 20, 21, 58, 3])
Output
20 58