Open In App

Python | Sort list containing alphanumeric values

Improve
Improve
Like Article
Like
Save
Share
Report

Given a list containing both alphanumeric values, write a Python program to sort the given list in such a way that the alphabetical values always comes after numeric values. Examples:

Input : ['k', 5, 'e', 3, 'g', 7, 0, 't']
Output : [0, 3, 5, 7, 'e', 'g', 'k', 't']

Input : [1, 'c', 3, 2, 'a', 'b']
Output : [1, 2, 3, 'a', 'b', 'c']

Approach 1 : Using sort() method To use Python sort() method we need to convert all list values to str type first. Now there are two methods to convert values to string.

  • Method #1 : List comprehension Python list comprehension can be simply used to convert each element of list to string type. We sort it and since all values are now str type, we change the final list to back to its original form. 

Python3




# Python3 program to Sort list
# containing alpha and numeric values
 
def sort(lst):
    lst = [str(i) for i in lst]
    lst.sort()
    lst = [int(i) if i.isdigit() else i for i in lst ]
    return lst
             
# Driver code
lst = ['k', 5, 'e', 3, 'g', 7, 0, 't']
print(sort(lst))


Output:

[0, 3, 5, 7, 'e', 'g', 'k', 't']
  • Method #2 : Using key function Key function serves as a key for the sort comparison, which is equal to str in our case. 

Python3




# Python3 program to Sort list
# containing alpha and numeric values
def sort(lst):
 
    lst.sort(key = str)
    return lst
 
# Driver code
lst = ['k', 5, 'e', 3, 'g', 7, 0, 't']
print(sort(lst))


Output:

[0, 3, 5, 7, 'e', 'g', 'k', 't']

Approach 2 : sorted() Alternatively, you can also use Python’s in-built function sorted() for the same purpose. Simplest difference between sort() and sorted() is: sort() doesn’t return any value while, sorted() returns an iterable list. Now there are again two ways of using sorted().

  • Method #1 : Using key function 

Python3




# Python3 program to Sort list
# containing alpha and numeric values
 
def sort(lst):
 
    return sorted(lst, key = str)
             
# Driver code
lst = ['k', 5, 'e', 3, 'g', 7, 0, 't']
print(sort(lst))


Output:

[0, 3, 5, 7, 'e', 'g', 'k', 't']
  • Method #2 : lambda 

Python3




# Python3 program to Sort list
# containing alpha and numeric values
 
def sort(lst):
     
    return sorted(lst, key = lambda x: (isinstance(x, str), x))
             
# Driver code
lst = ['k', 5, 'e', 3, 'g', 7, 0, 't']
print(sort(lst))


Output:

[0, 3, 5, 7, 'e', 'g', 'k', 't']

Approach#3:Using two lists and concatenation

Algorithm

1. Create two new lists: one for integers and one for strings.
2. Iterate through the original list.
3. For each element in the original list, check if it is a string or integer.
4. If it is a string, append it to the string list.
5. If it is an integer, append it to the integer list.
6. Sort both the integer and string lists.
7. Concatenate the integer and string lists together to create the final result list.
8. Return the final result list.

Python3




def sort_alphanumeric(input_list):
  int_list = []
  str_list = []
  for i in input_list:
    if isinstance(i, str):
      str_list.append(i)
    else:
      int_list.append(i)
  int_list = sorted(int_list)
  str_list = sorted(str_list)
  result_list = int_list + str_list
  return result_list
input_list = ['k', 5, 'e', 3, 'g', 7, 0, 't']
print(sort_alphanumeric(input_list))


Output

[0, 3, 5, 7, 'e', 'g', 'k', 't']

Time Complexity: O(n log n) for the sorted() function.
Space Complexity: O(n) for the int_list and str_list.

Approach#4: Using numpy

Algorithm:

Convert the input list to a numpy array using np.array() function.
Create a boolean mask array which checks whether each element of the array is of str or int type using np.char.isnumeric() function and logical not operator.
Sort the two subcontaining non-numeric elements, using np.sort() function.
Concatenate the two sorted sub-arrays using np.concatenate() function to obtain the final sorted array.

Convert the final sorted array to list using tolist() method.

Approach#4: Using Regular Expression
Algorithm

Create two empty lists, one for integers and one for strings.
Iterate through the original list.
Convert each element to a string using str().
Use regular expressions to check if the string matches a pattern for integer or string.
If the string matches the integer pattern, append it to the integer list.
If the string matches the string pattern, append it to the string list.
Sort both the integer and string lists.
Concatenate the integer and string lists together to create the final result list.
Return the final result list.

Python3




#Python3
import re
 
def sort_alphanumeric(input_list):
  int_list = []
  str_list = []
  for i in input_list:
    s = str(i)
    if re.match(r'^\d+$', s):
      int_list.append(int(s))
    else:
      str_list.append(s)
  int_list = sorted(int_list)
  str_list = sorted(str_list)
  result_list = int_list + str_list
  return result_list
 
input_list = ['k', 5, 'e', 3, 'g', 7, 0, 't']
print(sort_alphanumeric(input_list))


Output

[0, 3, 5, 7, 'e', 'g', 'k', 't']

Time Complexity: O(n log n) for the sorted() function.
Auxiliary Space: O(n) for the int_list and str_list.



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