Python | Count the elements till first tuple
AuxiliSometimes, while working with records, we can have a problem in which an element of a record is another tuple records and we might have to count the element count that occur before the record. This is a problem that does not occur commonly, but having a solution to it is useful. Let’s discuss certain ways in which this task can be performed.
Method #1 : Using loop + isinstance() + enumerate()
This problem can be solved using the above functionalities. In this, we just loop through the elements using enumerate() to get the index count of it and check the type using isinstance() method.
Python3
test_tup = ( 1 , 5 , 7 , ( 4 , 6 ), 10 )
print ( "The original tuple : " + str (test_tup))
for count, ele in enumerate (test_tup):
if isinstance (ele, tuple ):
break
print ( "Elements till the first tuple : " + str (count))
|
Output
The original tuple : (1, 5, 7, (4, 6), 10)
Elements till the first tuple : 3
Method #2: Using takewhile() + sum() + isinstance() + lambda
The combination of the above functions can also be used to solve this problem. In this, we use takewhile(), to iterate till a tuple and sum() to check the counter.
Python3
from itertools import takewhile
test_tup = ( 1 , 5 , 7 , ( 4 , 6 ), 10 )
print ( "The original tuple : " + str (test_tup))
res = sum ( 1 for sub in takewhile(
lambda ele: not isinstance (ele, tuple ), test_tup))
print ( "Elements till the first tuple : " + str (res))
|
Output :
The original tuple : (1, 5, 7, (4, 6), 10)
Elements till the first tuple : 3
Method #3 : Using type() method
Python3
test_tup = ( 1 , 5 , 7 , ( 4 , 6 ), 10 )
print ( "The original tuple : " + str (test_tup))
c = 0
for i in test_tup:
if ( type (i) is tuple ):
break
else :
c + = 1
print ( "Elements till the first tuple : " + str (c))
|
Output
The original tuple : (1, 5, 7, (4, 6), 10)
Elements till the first tuple : 3
Method #4 : Using next() and isinstance() function
This problem can be solved using the above functionalities. In this, we use the next() function to iterate over the elements in the tuple and check the type using isinstance() method.
Python3
test_tup = ( 1 , 5 , 7 , ( 4 , 6 ), 10 )
print ( "The original tuple : " + str (test_tup))
res = next (i for i, ele in enumerate (test_tup) if isinstance (ele, tuple ))
print ( "Elements till the first tuple : " + str (res))
|
Output
The original tuple : (1, 5, 7, (4, 6), 10)
Elements till the first tuple : 3
Time complexity: O(n)
Auxiliary Space: O(1)
In this method, we are using next() function which returns the next item from the iterator. We are passing an iterator which is a generator expression, it will return the index of the first tuple in the tuple. So, it is not creating any extra space, so the Auxiliary space is O(1) . We are iterating through all the elements of the tuple, so the time complexity is O(n).
METHOD 5:Using slicing
APPROACH:
This approach uses the index() method to find the index of the first occurrence of a tuple in the given tuple. It then uses slicing to extract the elements from the start of the tuple up to the index value, and returns the length of this slice as the count of non-tuple elements.
ALGORITHM:
1.Find the index of the first occurrence of a tuple using the index() method
2.Slice the tuple from the start to the index value
3.Find the length of the sliced tuple
4.Return the length value
Python3
def count_elements(tup):
index = tup.index( next ( filter ( lambda x: isinstance (x, tuple ), tup)))
return len (tup[:index])
tup = ( 1 , 5 , 7 , ( 4 , 6 ), 10 )
print (count_elements(tup))
|
Time complexity: O(n) where n is the number of elements in the tuple
Auxiliary Space: O(n) since the sliced tuple is stored in memory
Last Updated :
12 Apr, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...