Thursday, October 23, 2025
HomeLanguagesPython program to Sort Strings by Punctuation count

Python program to Sort Strings by Punctuation count

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)

Dominic
Dominichttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Dominic
32361 POSTS0 COMMENTS
Milvus
88 POSTS0 COMMENTS
Nango Kala
6728 POSTS0 COMMENTS
Nicole Veronica
11892 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11954 POSTS0 COMMENTS
Shaida Kate Naidoo
6852 POSTS0 COMMENTS
Ted Musemwa
7113 POSTS0 COMMENTS
Thapelo Manthata
6805 POSTS0 COMMENTS
Umr Jansen
6801 POSTS0 COMMENTS