Q:

Python program to restrict tuples by frequency of first element\'s value in a tuple list

0

Example:

tuple = ("python", "includehelp", 43, 54.23)

List is a sequence data type. It is mutable as its values in the list can be modified. It is a collection of ordered set of values enclosed in square brackets [].

Example:

list = [3 ,1,  5, 7]

List of tuples is a list whose each element is a tuple.

Example:

tupList = [("python", 7), ("learn" , 1), ("programming", 7), ("code" , 3)]

Restricting tuples by frequency of first element's value in a tuple list

We need to restrict the frequency of occurrence of tuple's first value to K. For this, we will be keeping a check on the count of occurrence of the first value of tuples and discard values where the count exceeds K.

For this we have multiple methods in Python,

Input:
[(1, 7), (6, 4), (3, 5), (1, 4), (7, 3), (3, 7)] k = 1

Output:
[(1, 7), (6, 4), (3, 5), (7, 3)]

All Answers

need an explanation for this answer? contact us directly to get an explanation for this answer

Method 1:

A method to solve the problem is by using a dictionary to count the occurrence of the first element of the tuple and accept the value if it is smaller than or equal to K, otherwise discard it. Then print the resultant list.

Program:

# Python program to restrict tuples by frequency of 
# first element's value in a tuple list

# Creating and Printing list of tuples 
tupList = [(1, 7), (6, 4), (3, 5), (1, 4), (7, 3), (3, 7)] 
print("Tuple List before Restricting tuples : " + str(tupList))
K = 1

# Restricting Tuples 
ristTupList = []
valCounter = dict()
for tup in tupList:

	if tup[0] not in valCounter.keys():
		valCounter[tup[0]] = 1
	else:
		valCounter[tup[0]] += 1
	if valCounter[tup[0]] <= K:
		ristTupList.append(tup)

# Printing the tuple List 
print("Tuple List after Restricting tuples : " + str(ristTupList))

Output:

Tuple List before Restricting tuples : [(1, 7), (6, 4), (3, 5), (1, 4), (7, 3), (3, 7)]
Tuple List after Restricting tuples : [(1, 7), (6, 4), (3, 5), (7, 3)]

Method 2:

An alternate way is to use the default dictionary for the value count and using the filter method to filter out values with frequency larger than K.

Program:

# Python program to restrict tuples by frequency of 
# first element's value in a tuple list

from collections import defaultdict

# Creating and Printing list of tuples 
tupList =  [(1, 7), (6, 4), (3, 5), (1, 4), (7, 3), (3, 7)]
print("Tuple List before Restricting tuples : " + str(tupList))
K = 2

# Restricting Tuples 
valCounter = defaultdict(list)
ristTupList = list(filter(lambda tup: valCounter[tup[0]].append(tup[0]) or len(valCounter[tup[0]]) <= K, tupList))

# Printing the tuple List 
print("Tuple List after Restricting tuples : " + str(ristTupList))

Output:

Tuple List before Restricting tuples : [(1, 7), (6, 4), (3, 5), (1, 4), (7, 3), (3, 7)]
Tuple List after Restricting tuples : [(1, 7), (6, 4), (3, 5), (1, 4), (7, 3), (3, 7)]

need an explanation for this answer? contact us directly to get an explanation for this answer

total answers (1)

Similar questions


need a help?


find thousands of online teachers now