Python | Checking if starting digits are similar in list
Sometimes we may face a problem in which we need to find a list if it contains numbers with the same digits. This particular utility has an application in day-day programming. Let’s discuss certain ways in which this task can be achieved.
Method #1: Using list comprehension + map()
We can approach this problem by converting the elements to the strings and then testing the starting element of string and if they are equal we can return true and then convert to set and test for size of result to be one. The conversion is done by map, set function converts to set and list comprehension checks for first element of string.
Python3
test_list = [ 45 , 4 , 428829 , 432 ]
print ( "The original list : " + str (test_list))
res = len ( set (sub[ 0 ] for sub in map ( str , test_list))) = = 1
print ( "Does each element start with same digit ? " + str (res))
|
Output
The original list : [45, 4, 428829, 432]
Does each element start with same digit ? True
Time Complexity: O(n) where n is the number of elements in the list.
Auxiliary Space: O(n) as we are storing the first digit of each element in a set.
Method #2: Using all() + list comprehension
This is yet another approach in which this problem can be solved. In this, we use all function to check for all elements and return a Boolean result and list comprehension does the part of the conversion of string by str function and checking for all elements with the first digit of first element.
Python3
test_list = [ 45 , 4 , 428829 , 432 ]
print ( "The original list : " + str (test_list))
res = all ( str (i)[ 0 ] = = str (test_list[ 0 ])[ 0 ] for i in test_list)
print ( "Does each element start with same digit ? " + str (res))
|
Output
The original list : [45, 4, 428829, 432]
Does each element start with same digit ? True
Time complexity: O(n), where n is the length of the input list.
Auxiliary space: O(1), as the space used is constant regardless of the input size.
Method #3: Using startswith() method
Python3
test_list = [ 45 , 4 , 428829 , 432 ]
p = list ( map ( str ,test_list))
print ( "The original list : " + str (test_list))
c = 0
x = p[ 0 ][ 0 ]
for i in p:
if (i.startswith(x)):
c + = 1
res = False
if (c = = len (p)):
res = True
print ( "Does each element start with same digit ? " + str (res))
|
Output
The original list : [45, 4, 428829, 432]
Does each element start with same digit ? True
Time complexity: O(n) – The code iterates through each element of the list once.
Auxiliary space: O(n) – The code creates a new list ‘p’ with the same number of elements as the original list.
Method #4 : Using for loop,len() method
Python3
test_list = [ 45 , 4 , 428829 , 432 ]
p = list ( map ( str , test_list))
print ( "The original list : " + str (test_list))
c = 0
x = [p[ 0 ][ 0 ]] * len (test_list)
y = []
for i in p:
y.append(i[ 0 ])
res = False
if (x = = y):
res = True
print ( "Does each element start with same digit ? " + str (res))
|
Output
The original list : [45, 4, 428829, 432]
Does each element start with same digit ? True
Method #5 : Using re
The code initializes a list test_list with four elements. Then it prints the original list to the console.
Next, it uses a list comprehension to extract the first digit from each element in the test_list. It does this by using the findall() function from the re module to match a single digit in the string representation of each element, and then it gets the first element from the resulting list. The resulting list is stored in the first_digits variable.
Finally, it uses the len() and set() functions to check if all the elements in the first_digits list are the same. It does this by converting the first_digits list to a set, which removes any duplicates, and then checking if the length of the set is equal to 1. The result is stored in the res variable, which is a Boolean value indicating whether all the elements in the first_digits list are the same. The result is printed to the console.
Here is an example of how this can be implemented:
Python3
import re
test_list = [ 45 , 4 , 428829 , 432 ]
print ( "The original list:" , test_list)
first_digits = [re.findall(r '\d' , str (i))[ 0 ] for i in test_list]
res = len ( set (first_digits)) = = 1
print ( "Does each element contain the same digits?" , res)
|
Output
The original list: [45, 4, 428829, 432]
Does each element contain the same digits? True
Time complexity: O(n), where n is the length of the test_list, because the list comprehension iterates over the elements of the test_list once, and the len() and set() functions each iterate over the elements of the first_digits list once.
Auxiliary space: O(n), because the first_digits list grows by one element for each iteration of the list comprehension, and the set() function creates a new set object with a capacity equal to the number of elements in the first_digits list.
Method #6 : Using str() and count() methods
- Initiated a for loop to traverse the list
- Converted element to string and appended the first character to a list
- Checked if the count of first element of list to length of list(using count())
- If True assign True to res variable
- Display res variable
Python3
test_list = [ 45 , 4 , 428829 , 432 ]
print ( "The original list : " + str (test_list))
res = False
y = []
for i in test_list:
x = str (i)
y.append(x[ 0 ])
if (y.count(y[ 0 ]) = = len (y)):
res = True
print ( "Does each element start with same digit ? " + str (res))
|
Output
The original list : [45, 4, 428829, 432]
Does each element start with same digit ? True
Time Complexity : O(N)
Auxiliary Space : O(1)
Method #7: Using set comprehension and string slicing
This method uses a set comprehension to extract the first digit of each element in the list and stores them in a set. Then it checks whether the length of the set is equal to 1, which means all elements have the same first digit.
Python3
test_list = [ 45 , 4 , 428829 , 432 ]
print ( "The original list : " + str (test_list))
first_digits = { str (i)[ 0 ] for i in test_list}
res = len (first_digits) = = 1
print ( "Does each element start with same digit? " + str (res))
|
Output
The original list : [45, 4, 428829, 432]
Does each element start with same digit? True
Time complexity: O(n), where n is the number of elements in the list.
Auxiliary space: O(n), since we need to store the first digit of each element in a set.
Method #8: Using a while loop and integer division
Algorithm:
- Initialize a variable ‘first_digit’ with the first digit of the first element in the list.
- Use a while loop to iterate through the remaining elements of the list and for each element, get its first digit by dividing it by 10 until the quotient is less than 10.
- Check if the first digit is equal to ‘first_digit‘. If not, return False.
- If the loop completes without returning False, return True.
Implementation:
Python3
test_list = [ 45 , 4 , 428829 , 432 ]
print ( "The original list : " + str (test_list))
first_digit = test_list[ 0 ] / / 10 * * ( len ( str (test_list[ 0 ])) - 1 )
for i in range ( 1 , len (test_list)):
num = test_list[i]
while num > = 10 :
num / / = 10
if num ! = first_digit:
res = False
break
else :
res = True
print ( "Does each element start with same digit? " + str (res))
|
Output
The original list : [45, 4, 428829, 432]
Does each element start with same digit? True
Time Complexity: O(n*m), where n is the length of the list and m is the number of digits in the largest element.
Auxiliary Space: O(1)
Last Updated :
09 Apr, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...