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)))