Open In App

Python program to Sort Strings by Punctuation count

Improve
Improve
Like Article
Like
Save
Share
Report

Given the Strings list, sort by punctuations count.

Input : test_list = [“gfg@%^”, “is”, “Best!”] 
Output : [‘is’, ‘Best!’, ‘gfg@%^’] 
Explanation : 0 < 1 < 3, sorted by punctuation count.

Input : test_list = [“gfg@%^”, “Best!”] 
Output : [ ‘Best!’, ‘gfg@%^’] 
Explanation : 1 < 3, sorted by punctuation count. 

Method #1 : Using string.punctuation + sort()

In this, sorting is done using sort() and punctuations are extracted from punctuation pool from string library. Performs inplace sort.

Python3




# Python3 code to demonstrate working of
# Sort Strings by Punctuation count
# Using string.punctuation + sort()
from string import punctuation
 
def get_pnc_count(string):
     
    # getting punctuation count
    return len([ele for ele in string if ele in punctuation])
 
# initializing list
test_list = ["gfg@%^", "is", "Best!", "fo@#r", "@#$ge24eks!"]
 
# printing original list
print("The original list is : " + str(test_list))
 
# performing inplace sort
test_list.sort(key = get_pnc_count)
 
# printing result
print("Sorted Strings list : " + str(test_list))


Output:

The original list is : ['gfg@%^', 'is', 'Best!', 'fo@#r', '@#$ge24eks!'] 
Sorted Strings list : ['is', 'Best!', 'fo@#r', 'gfg@%^', '@#$ge24eks!'] 

Time Complexity: O(n*nlogn)
Auxiliary Space: O(1)

Method #2 : Using sorted() + punctuation + lambda

In this, we perform sort using sorted() using lambda to avoid external function to perform task of filtering punctuations extracted using punctuation.

Python3




# Python3 code to demonstrate working of
# Sort Strings by Punctuation count
# Using sorted() + punctuation + lambda
from string import punctuation
 
# initializing list
test_list = ["gfg@%^", "is", "Best!", "fo@#r", "@#$ge24eks!"]
 
# printing original list
print("The original list is : " + str(test_list))
 
# performing sort using sorted() with lambda
# function for filtering
res = sorted(test_list, key=lambda string: len(
    [ele for ele in string if ele in punctuation]))
 
# printing result
print("Sorted Strings list : " + str(res))


Output:

The original list is : [‘gfg@%^’, ‘is’, ‘Best!’, ‘fo@#r’, ‘@#$ge24eks!’] 
Sorted Strings list : [‘is’, ‘Best!’, ‘fo@#r’, ‘gfg@%^’, ‘@#$ge24eks!’] 

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

Method #3: Using re

This approach uses a regular expression pattern r'[^\w\s]’ to match any character that is not a word character (letters, digits, and underscores) or whitespace. The re.findall() function returns a list of all non-overlapping matches as strings.

Python3




import re
 
def get_punctuation_count(string):
    return len(re.findall(r'[^\w\s]', string))
 
test_list = ["gfg@%^", "is", "Best!", "fo@#r", "@#$ge24eks!"]
print("The original list is: ", test_list)
 
res = sorted(test_list, key=get_punctuation_count)
print("Sorted Strings list: ", res)


Output

The original list is:  ['gfg@%^', 'is', 'Best!', 'fo@#r', '@#$ge24eks!']
Sorted Strings list:  ['is', 'Best!', 'fo@#r', 'gfg@%^', '@#$ge24eks!']

Time complexity: O(n)
Auxiliary space: O(n)

Method 4: Use the Counter module from collections. 

Step-by-step approach:

  1. Import the Counter module from collections.
  2. Define a function that takes a string and returns the count of its punctuation characters using Counter.
  3. Initialize the list of strings to be sorted.
  4. Use sorted() function with a lambda function that calls the function defined in step 2 for each string in the list.
  5. Print the sorted list.

Python3




from string import punctuation
from collections import Counter
 
# Function to count punctuation characters in a string
def count_punct(string):
    return sum(Counter(string) for c in punctuation)
 
# initializing list
test_list = ["gfg@%^", "is", "Best!", "fo@#r", "@#$ge24eks!"]
 
# printing original list
print("The original list is : " + str(test_list))
 
# performing sort using sorted() with lambda
# function for filtering
res = sorted(test_list, key=lambda string: count_punct(string))
 
# printing result
print("Sorted Strings list : " + str(res))


Output

The original list is : ['gfg@%^', 'is', 'Best!', 'fo@#r', '@#$ge24eks!']
Sorted Strings list : ['is', 'Best!', 'fo@#r', 'gfg@%^', '@#$ge24eks!']

Time complexity: O(n)
Auxiliary space: O(n)



Last Updated : 26 Apr, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads