Une liste:
a = ['a', 'b', 'c', 3, 4, 'd', 6, 7, 8]
Je veux une liste utilisant un sous-ensemble d'un utilisant a[0:2],a[4], a[6:]
,
c'est-à-dire que je veux une liste ['a', 'b', 4, 6, 7, 8]
Essayez new_list = a[0:2] + [a[4]] + a[6:]
.
Ou plus généralement, quelque chose comme ceci:
from itertools import chain
new_list = list(chain(a[0:2], [a[4]], a[6:]))
Cela fonctionne également avec d'autres séquences et sera probablement plus rapide.
Ou vous pouvez faire ceci:
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:])
Mais attention, cela entraînerait des problèmes si certains des éléments de votre liste étaient eux-mêmes des listes. Pour résoudre ce problème, utilisez l'une des solutions précédentes ou remplacez a[4]
avec a[4:5]
(ou plus généralement a[n]
avec a[n:n+1]
).
Supposer
a = ['a', 'b', 'c', 3, 4, 'd', 6, 7, 8]
et la liste des index est stockée dans
b= [0, 1, 2, 4, 6, 7, 8]
alors une solution simple en ligne sera
c = [a[i] for i in b]
La définition suivante pourrait être plus efficace que la première solution proposée
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
alors vous pouvez l'utiliser comme ci-dessous
new_list = new_list_from_intervals(original_list, (0,2), (4,5), (6, len(original_list)))