Python: ordena la lista dada de strings por parte de la parte numérica de la string

Dada una lista de strings. La tarea es ordenar la lista por la parte numérica de la string.

Ejemplos:

Entrada : test_list = [“Gfg34”, “is67”, “be3st”, “f23or”, “ge9eks”] 
Salida : [‘be3st’, ‘ge9eks’, ‘f23or’, ‘Gfg34’, ‘is67’] 
Explicación : 3 < 9 < 23 < 34 < 67, números extraídos de strings.

Entrada : test_list = [“Gfg4”, “is67”, “be3st”, “f23or”, “ge9eks”] 
Salida : [‘be3st’, ‘Gfg4’, ‘ge9eks’, ‘f23or’, ‘is67’] 
Explicación : 3 < 4 < 9 < 23 < 67, números extraídos de strings. 

Método #1: Usar sort() + re.findall()

En esto, realizamos la tarea de ordenar usando sort() , la función explícita se usa para extraer números usando findall().

Python3

# Python3 code to demonstrate working of
# Sort Strings on numerical substrings
# Using sort() + findall()
import re
 
# helper function to perform sort
def num_sort(test_string):
    return list(map(int, re.findall(r'\d+', test_string)))[0]
 
# initializing list
test_list = ["Gfg34", "is67", "be3st", "f23or", "ge9eks"]
 
# printing original list
print("The original list is : " + str(test_list))
 
# calling function
test_list.sort(key=num_sort)
 
# printing result
print("Strings after numerical Sort  : " + str(test_list))

Producción:

La lista original es: [‘Gfg34’, ‘is67’, ‘be3st’, ‘f23or’, ‘ge9eks’] 
Strings después de ordenación numérica: [‘be3st’, ‘ge9eks’, ‘f23or’, ‘Gfg34’, ‘is67 ‘]

Método #2: Usar sort() + lambda + findall()

En esto, realizamos una función similar, pero la diferencia es que usamos la función lambda en lugar de una función externa para realizar la tarea de clasificación.

Python3

# Python3 code to demonstrate working of
# Sort Strings on numerical substrings
# Using sort() + lambda + findall()
import re
 
# initializing list
test_list = ["Gfg34", "is67", "be3st", "f23or", "ge9eks"]
 
# printing original list
print("The original list is : " + str(test_list))
 
# findall() getting all integers.
# conversion to integers using map()
test_list.sort(key=lambda test_string : list(
    map(int, re.findall(r'\d+', test_string)))[0])
 
# printing result
print("Strings after numerical Sort  : " + str(test_list))

Producción:

La lista original es: [‘Gfg34’, ‘is67’, ‘be3st’, ‘f23or’, ‘ge9eks’] 
Strings después de ordenación numérica: [‘be3st’, ‘ge9eks’, ‘f23or’, ‘Gfg34’, ‘is67 ‘]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *