Open In App

Python program to Sort Strings by Punctuation count

Last Updated : 23 Jul, 2025
Comments
Improve
Suggest changes
Like Article
Like
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)[c] 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)


Similar Reads

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy