Python: extrae elementos de rangos en la lista

Dada una lista y una lista de tuplas con rangos, extraiga todos los elementos en esos rangos de la lista.

Entrada : test_list = [4, 5, 4, 6, 7, 5, 4, 5, 6, 10], range_list = [(2, 4), (7, 8)]
Salida : [4, 6, 7, 5, 6]
Explicación : 4, 6, 7 son elementos en idx 2, 3, 4 y 5, 6 en idx 7, 8.

Entrada : test_list = [4, 5, 4, 6, 7, 5, 4, 5, 6, 10], range_list = [(2, 6)]
Salida : [4, 6, 7, 5, 4]
Explicación : Se extraen los elementos del índice 2-6.

Método n. ° 1: usar loop + list slicing 

En esto, extraemos cada rango usando el corte de lista y usando la iteración de bucle para cada rango y seguimos extendiendo los cortes de extracción para extender la lista.

Python3

# Python3 code to demonstrate working of 
# Extract elements from Ranges in List
# Using loop + list slicing 
  
# initializing list
test_list = [4, 5, 4, 6, 7, 5, 4, 5, 4, 6, 4, 6, 9, 8]
  
# printing original list
print("The original list is : " + str(test_list))
  
# initializing ranges
range_list = [(2, 4), (7, 8), (10, 12)]
  
res = []
for ele in range_list:
      
    # extending ranges
    res.extend(test_list[ele[0] : ele[1] + 1])
  
# printing result 
print("Ranges elements : " + str(res))
Producción

The original list is : [4, 5, 4, 6, 7, 5, 4, 5, 4, 6, 4, 6, 9, 8]
Ranges elements : [4, 6, 7, 5, 4, 4, 6, 9]

Método #2: Usar la comprensión de listas

En esto, aplicamos un método similar a la función anterior, con la diferencia de que se usa la comprensión de lista para resolver esto en forma compacta.

Python3

# Python3 code to demonstrate working of 
# Extract elements from Ranges in List
# Using list comprehension
from itertools import chain
  
# initializing list
test_list = [4, 5, 4, 6, 7, 5, 4, 5, 4, 6, 4, 6, 9, 8]
  
# printing original list
print("The original list is : " + str(test_list))
  
# initializing ranges
range_list = [(2, 4), (7, 8), (10, 12)]
  
# using one-liner to solve this problem
res = list(chain.from_iterable([test_list[ele[0] : ele[1] + 1] for ele in range_list]))
  
# printing result 
print("Ranges elements : " + str(res))
Producción

The original list is : [4, 5, 4, 6, 7, 5, 4, 5, 4, 6, 4, 6, 9, 8]
Ranges elements : [4, 6, 7, 5, 4, 4, 6, 9]

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 *