Python Lexicographic Order
Python lexicographic order
Before we discuss the lexicographic order in Python, we should understandwhat is lexicographic order and sort according to lexicographic order.
Lexicographic order
In mathematics, the generalization of the alphabetical order of the dictionaries to sequences of ordered elements or, more generally, we can say that symbols of an ordered set are called the lexicographic order. Hence, lexicographic order is commonly known as dictionary order or lexical order.
Lexicographic order in Python
In Python, we sort alphabets, words, or strings according to many sorting orders to get the required sorted data in the output. We can sort all these data elements by lexicographic order as well, and we can also sort numbers & symbols with lexicographic order in Python.
In this tutorial, we will sort strings, numbers, words, and lists in lexical order. We will design a program for sorting each type and working of the program.
Sorting words in lexicographic order
As we have already mentioned that, the lexicographic order is also known as dictionary order. We will arrange words first by their first letter while sorting them according to lexicographic order. We can perform this sorting with two functions, i.e., sort() and sorted().
The only difference between these two functions is that sort() function changes the original array into a sorted array, whereas the sorted() function creates a new sorted array.
Now, look at the following examples:
Example 1: Sorting words in lexicographic order with sort() function:
# Define an array with words Original_Array = ["Python", "Julia", "Go", "MATLAB", "SPSS", "R", "C"] # Printing original array print ("The original array: ",Original_Array) # sorting words in dictionary order Original_Array.sort() # printing original array after sorting print ("Sorted array: ",Original_Array)
Output:
The original array: ['Python', 'Julia', 'Go', 'MATLAB', 'SPSS', 'R', 'C'] Sorted array: ['C', 'Go', 'Julia', 'MATLAB', 'Python', 'R', 'SPSS']
Example 2: Using sorted() function to sort words in lexicographic order:
# Define an array with words Original_Array = ["Python", "Julia", "Go", "MATLAB", "SPSS", "R", "C"] # using sorted() function to sort words of array Sorted_Array = sorted(Original_Array) # printing sorted array print ("Sorted array: ",Sorted_Array) # now printing original array print ("The original array: ",Original_Array)
Output:
Sorted array: ['C', 'Go', 'Julia', 'MATLAB', 'Python', 'R', 'SPSS'] The original array: ['Python', 'Julia', 'Go', 'MATLAB', 'SPSS', 'R', 'C']
We can see the difference in the working of both functions. When we use sorted() function, the original array remains unaffected, whereas when we are using sort() function, the original array itself changes into a sorted array.
Sorting a string with lexicographic order
In Python, sorting a string in lexicographic order is very similar to sorting words in the same order. However, when we use the lexicographic order on a string, the words present in the string changes into a dictionary or lexicographic order.
Here, we will use the split() function and then sort() function to sort the words of the string in lexicographic order and then print them in the output.
Look at the following example program:
Example – 1
# Default lexical sorting function def LexicalSorting(Orig_str): # using split() function WordOfString = Orig_str.split() # using sort() function WordOfString.sort() # printing string in sorted words for a in WordOfString: print ( a ) if __name__ == '__main__': # define a string Orig_str = "This is an example string to be sorted in the program" # Printing original string print ("Original string: ",Orig_str) # Calling out sorting function print ("Sorted string words: ") LexicalSorting(Orig_str)
Output:
Original string: This is an example string to be sorted in the program Sorted string words: This an be example in is program sorted string the to
Using lexicographic order to sort a given set of numbers
Now, we will sort a given set of numbers according to lexicographic order. If we have a given set of numbers, Let's say (1, 2, 5, 13), then it will be sorted as (1, 13, 2, 5) in lexicographic order.
In the following example, we will take lower and upper range of numbers from user and then we will sort these numbers in the lexicographical order:
# default lexicographic sorting function def LexoSort(lef, righ): SortSet = [] for a in range(lef, righ + 1): SortSet.append(str(a)) SortSet.sort() answer = [] for a in range(len(SortSet)): answer.append(int(SortSet[a])) for a in range(len(SortSet)): print (answer[a], end = " ") # printing sorted numbers if __name__ == "__main__": # taking ranges from user lef = int (input ("Enter the left range number for the range of numbers: ")) righ = int (input ("Enter the left range number for the range of numbers: ")) # calling out sorting function print ("Sorted numbers from the given range: ") LexoSort(lef, righ)
Output:
Enter the left range number for the range of numbers: 7 Enter the left range number for the range of numbers: 31 Sorted numbers from the given range: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 7 8 9
Sorting Python lists in lexicographic order
When we use the lexicographical order on a given set of Python lists, the lists are printed sorted according to the dictionary order. Then they sort according to their length (element present in them).
We will use the following two methods to sort Python lists in lexicographic order:
Method 1: Using sort() function twice to sort lists:
# initializing a group of lists GroupofLists = [[1, 4, 3, 2, 7], [5, 4, 1, 3], [1, 4, 6, 7, 2, 6], [9, 8, 7], [1, 9, 3,.7]] # printing unsorted list print ("Unsorted lists : " + str(GroupofLists)) # Sorting lists with sort() twice GroupofLists.sort() GroupofLists.sort(key = len) # printing sorted lists print ("Sorted lists after sorting them by dictionary order and their length " + str(GroupofLists))
Output:
Unsorted lists : [[1, 4, 3, 2, 7], [5, 4, 1, 3], [1, 4, 6, 7, 2, 6], [9, 8, 7], [1, 9, 3, 0.7]] Sorted lists after sorting them by dictionary order and their length [[9, 8, 7], [1, 9, 3, 0.7], [5, 4, 1, 3], [1, 4, 3, 2, 7], [1, 4, 6, 7, 2, 6]]
Method 2: Using lambda function to sort lists with lexicographic order:
# initializing a group of lists GroupofLists = [[1, 4, 3, 2, 7], [5, 4, 1, 3], [1, 4, 6, 7, 2, 6], [9, 8, 7], [1, 9, 3,.7]] # printing unsorted list print ("Unsorted lists : " + str(GroupofLists)) # using lambda function to sort lists SortedLists = sorted(GroupofLists, key = lambda a: (len(a), a)) # printing sorted lists print ("Sorted lists after sorting them by dictionary order and their length " + str(SortedLists))
Output:
Unsorted lists : [[1, 4, 3, 2, 7], [5, 4, 1, 3], [1, 4, 6, 7, 2, 6], [9, 8, 7], [1, 9, 3, 0.7]] Sorted lists after sorting them by dictionary order and their length [[9, 8, 7], [1, 9, 3, 0.7], [5, 4, 1, 3], [1, 4, 3, 2, 7], [1, 4, 6, 7, 2, 6]]