Given a list, your task is to determine the list is K percent same i.e has element that is populated more than K % times.
Given below are few methods to solve the task.
Method #1 Using collections.Counter
Python3
# Python3 code to demonstrate # to check whether the list # K percent same or not from collections import Counter # initializing list ini_list1 = [ 1 , 2 , 3 , 1 , 1 , 1 , 1 , 1 , 3 , 2 ] # printing initial list print ("Initial list ", ini_list1) # initializing K K = 60 # code to check whether list is K % same or not i, freq = Counter(ini_list1).most_common( 1 )[ 0 ] if len (ini_list1) * (K / 100 ) < = freq: print (" True ") else : print (" False ") |
Output:
Initial list [1, 2, 3, 1, 1, 1, 1, 1, 3, 2] True
Method #2: Using dictionary and its values
Python3
# Python3 code to demonstrate # to check whether the list # K percent same or not from collections import Counter, defaultdict # initializing list ini_list1 = [ 1 , 2 , 3 , 1 , 1 , 1 , 1 , 1 , 3 , 2 ] # printing initial list print ("Initial list ", ini_list1) # initializing K K = 60 # code to check whether list is K % same or not freq = defaultdict( int ) for x in ini_list1: freq[x] + = 1 freq = freq.values() if max (freq) > = (K / 100 ) * sum (freq): print (" True ") else : print (" False ") |
Output:
initial list [1, 2, 3, 1, 1, 1, 1, 1, 1, 1] True
Method #3: Using List comprehension and set()
Python3
# Python3 code to demonstrate # to check whether the list # K percent same or not # initializing list ini_list1 = [ 1 , 2 , 3 , 1 , 1 , 1 , 1 , 1 , 3 , 2 ] # printing initial list print ( "Initial list" , ini_list1) # initializing K K = 60 # code to check whether list is K % same or not count = len ([x for x in set (ini_list1) if ini_list1.count(x) > = (K / 100 ) * len (ini_list1)]) if count > 0 : print ( "True" ) else : print ( "False" ) #This code is contributed by Edula Vinay Kumar Reddy |
Initial list [1, 2, 3, 1, 1, 1, 1, 1, 3, 2] True
In method #3, we use list comprehension and set() to check if the given list is K percent same i.e has element that is populated more than K % times.
First, the program creates a set of all the unique elements in the list, then using list comprehension, it counts the number of occurrences of each unique element in the original list. The program then checks if the count of any of the unique elements is greater than or equal to (K/100) * len(ini_list1), this check is performed for all the unique elements in the list. If the count of any of the elements is greater than the required value, the program returns True, else it returns False.
Method #4: Using a for loop:
Python3
def is_k_percent_same(lst, k): count = {} for num in lst: if num in count: count[num] + = 1 else : count[num] = 1 most_common = max (count.values()) if most_common > = len (lst) * (k / 100 ): return True else : return False ini_list1 = [ 1 , 2 , 3 , 1 , 1 , 1 , 1 , 1 , 3 , 2 ] # printing initial list print ( "Initial list" , ini_list1) K = 60 print (is_k_percent_same(ini_list1, K)) #This code is contributed by Jyothi pinjala. |
Initial list [1, 2, 3, 1, 1, 1, 1, 1, 3, 2] True
Time Complexity: O(N)
Auxiliary Space: O(N)
Method #5: Using numpy.bincount()
- Import the numpy module.
- Pass the list ‘lst’ to numpy.bincount() to obtain the counts of each element in ‘lst’.
- Get the maximum count from the bincount array.
- Calculate the threshold value (len(lst) * (k/100)).
- Check if the maximum count is greater than or equal to the threshold value.
- Return True if the condition is satisfied, False otherwise.
Python3
import numpy as np def is_k_percent_same(lst, k): bincount = np.bincount(lst) most_common = np. max (bincount) threshold = len (lst) * (k / 100 ) if most_common > = threshold: return True else : return False ini_list1 = [ 1 , 2 , 3 , 1 , 1 , 1 , 1 , 1 , 3 , 2 ] # printing initial list print ( "Initial list" , ini_list1) K = 60 print (is_k_percent_same(ini_list1, K)) |
OUTPUT : Initial list [1, 2, 3, 1, 1, 1, 1, 1, 3, 2] True
Time Complexity: O(n)
Auxiliary Space: O(max(lst)) (for creating the bincount array)