creando una nueva lista con un subconjunto de lista usando el índice en Python

Una lista:

a = ['a', 'b', 'c', 3, 4, 'd', 6, 7, 8] 

Quiero una lista usando un subconjunto de a usando a[0:2],a[4], a[6:] ,

es decir, quiero una lista ['a', 'b', 4, 6, 7, 8]

Prueba new_list = a[0:2] + [a[4]] + a[6:] .

O más generalmente, algo como esto:

 from itertools import chain new_list = list(chain(a[0:2], [a[4]], a[6:])) 

Esto funciona con otras secuencias también, y es probable que sea más rápido.

O podrías hacer esto:

 def chain_elements_or_slices(*elements_or_slices): new_list = [] for i in elements_or_slices: if isinstance(i, list): new_list.extend(i) else: new_list.append(i) return new_list new_list = chain_elements_or_slices(a[0:2], a[4], a[6:]) 

Pero tenga cuidado, esto llevaría a problemas si algunos de los elementos en su lista fueran ellos mismos listas. Para resolver esto, use una de las soluciones anteriores o reemplace a[4] con a[4:5] (o más generalmente a[n] con a[n:n+1] ).

Suponer

 a = ['a', 'b', 'c', 3, 4, 'd', 6, 7, 8] 

y la lista de índices se almacena en

 b= [0, 1, 2, 4, 6, 7, 8] 

entonces una solución simple de una línea será

 c = [a[i] for i in b] 

La siguiente definición podría ser más eficiente que la primera solución propuesta

 def new_list_from_intervals(original_list, *intervals): n = sum(j - i for i, j in intervals) new_list = [None] * n index = 0 for i, j in intervals : for k in range(i, j) : new_list[index] = original_list[k] index += 1 return new_list 

entonces puedes usarlo como abajo

 new_list = new_list_from_intervals(original_list, (0,2), (4,5), (6, len(original_list)))