Open In App

Python program to construct Equidigit tuples

Last Updated : 26 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given the Elements list, divide the tuple list into similar digit tuples pairs.

Input : test_list = [5654, 223, 982143, 34, 1021] 
Output : [(56, 54), (2, 23), (982, 143), (3, 4), (10, 21)] 
Explanation : Element in tuples equidistributed.

Input : test_list = [5654, 223, 1021] 
Output : [(56, 54), (2, 23), (10, 21)] 
Explanation : Element in tuples equidistributed. 

Method #1 : Using loop + slicing + str()

In this, we perform the task of dividing by getting mid-idx and then slice from mid, initially integral number is split to a string by using str().

Python3




# Python3 code to demonstrate working of
# Construct Equidigit tuples
# Using loop + slicing str()
 
# initializing list
test_list = [5654, 223, 982143, 34, 1021]
 
# printing original list
print("The original list is : " + str(test_list))
 
res = []
for sub in test_list:
     
    # getting mid element
    mid_idx = len(str(sub)) // 2
     
    # slicing Equidigits
    el1 = str(sub)[:mid_idx]
    el2 = str(sub)[mid_idx:]
     
    res.append((int(el1), int(el2)))
 
# printing result
print("Equidigit tuples List : " + str(res))


 Output:

The original list is : [5654, 223, 982143, 34, 1021] Equidigit tuples List : [(56, 54), (2, 23), (982, 143), (3, 4), (10, 21)]

Time Complexity: O(n)
Auxiliary Space: O(n)

Method #2: Using list comprehension + divmod() function

Ue a list comprehension to iterate over the list of integers and construct the equidigit tuples using the divmod() function. The divmod() function takes two arguments and returns a tuple containing the quotient and remainder of the division. We can use this function to split an integer into its two halves.

Step-by-step approach:

  • Initialize the list of integers test_list with the given values.
  • Print the original list using the print() function and string concatenation.
  • Use a list comprehension to iterate over the list of integers test_list.
  • In each iteration, compute the length of the integer using the len() function and integer division // by 2. This gives us the index of the middle digit.
  • Use the divmod() function to split the integer into its two halves. The first argument to divmod() is the integer, and the second argument is the power of 10 corresponding to the index of the middle digit.
  • The list comprehension returns a list of tuples containing the two halves of each integer.
  • Print the resulting list of tuples using the print() function and string concatenation.

Python3




# Python3 code to demonstrate working of
# Construct Equidigit tuples
# Using list comprehension + divmod() function
 
# initializing list
test_list = [5654, 223, 982143, 34, 1021]
 
# printing original list
print("The original list is : " + str(test_list))
 
# using list comprehension + divmod() function
res = [divmod(sub, 10 ** (len(str(sub)) // 2)) for sub in test_list]
 
# printing result
print("Equidigit tuples List : " + str(res))


Output

The original list is : [5654, 223, 982143, 34, 1021]
Equidigit tuples List : [(56, 54), (22, 3), (982, 143), (3, 4), (10, 21)]

Time complexity: O(n*log(m)), where n is the length of the input list and m is the maximum number of digits in any integer in the list.
Auxiliary space: O(n), since we are creating a new list of tuples containing the equidigit halves.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads