Python | Convertir rangos de strings a lista

A veces, mientras trabajamos en aplicaciones, podemos tener un problema en el que se nos da una string ingenua que proporciona rangos separados por un guión y otros números separados por comas. Este problema puede ocurrir en muchos lugares. Analicemos ciertas formas en que se puede resolver este problema.

Método n.º 1: usar sum() + split()+ comprensión de listas +enumerate()
La combinación de las funciones anteriores se puede usar para realizar estas tareas. En esto, la división se realiza con guión y coma y, en consecuencia, el rango, los números se extraen y compilan en una lista.

# Python3 code to demonstrate working of
# Convert String ranges to list
# Using sum() + list comprehension + enumerate() + split()
  
# initializing string 
test_str = "1, 4-6, 8-10, 11"
  
# printing original string 
print("The original string is : " + test_str)
  
# Convert String ranges to list
# Using sum() + list comprehension + enumerate() + split()
res = sum(((list(range(*[int(b) + c 
           for c, b in enumerate(a.split('-'))]))
           if '-' in a else [int(a)]) for a in test_str.split(', ')), [])
  
# printing result
print("List after conversion from string : " + str(res))
Producción :

The original string is : 1, 4-6, 8-10, 11
List after conversion from string : [1, 4, 5, 6, 8, 9, 10, 11]

Método #2: Usar map() + split()+ lambda
Esta tarea también se puede realizar usando las funciones anteriores. Similar al método anterior. La única diferencia es que usamos map() y la función lambda para reducir la legibilidad compleja. Funciona solo con Python2.

# Python2 code to demonstrate working of
# Convert String ranges to list
# Using map() + lambda + split()
  
# initializing string 
test_str = "1, 4-6, 8-10, 11"
  
# printing original string 
print("The original string is : " + test_str)
  
# Convert String ranges to list
# Using map() + lambda + split()
temp = [(lambda sub: range(sub[0], sub[-1] + 1))(map(int, ele.split('-')))\
        for ele in test_str.split(', ')]
  
res = [b for a in temp for b in a]
  
# printing result
print("List after conversion from string : " + str(res))
Producción :

The original string is : 1, 4-6, 8-10, 11
List after conversion from string : [1, 4, 5, 6, 8, 9, 10, 11]

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 *