Python: comment faire pour supprimer/supprimer tous les n-ième élément de la liste?
J'avais déjà regardé à travers ce post:
Python: la construction d'une nouvelle liste en laissant tomber tous les n-ième élément, mais pour quelque raison il ne fonctionne pas pour moi:
J'ai essayé de cette façon:
def drop(mylist, n):
del mylist[0::n]
print(mylist)
Cette fonction prend une liste et n
. Ensuite, il supprime tous les n-ième élément à l'aide de n-étape à partir de la liste et imprime le résultat.
Voici mon appel de la fonction:
drop([1,2,3,4],2)
Mauvaise sortie:
[2, 4]
au lieu de [1, 3]
Ensuite, j'ai essayé une variante à partir du lien ci-dessus:
def drop(mylist, n):
new_list = [item for index, item in enumerate(mylist) if index % n != 0]
print(new_list)
De nouveau, appel de la fonction:
drop([1,2,3,4],2)
Me donne le même résultat erroné:
[2, 4]
au lieu de [1, 3]
Comment bien enlever/supprimer/supprimer tous les n-ième élément d'une liste?
OriginalL'auteur Erba Aitbayev | 2015-10-03
Vous devez vous connecter pour publier un commentaire.
Dans votre première fonction
mylist[0::n]
est[1, 3]
parce que0::n
signifie premier élément est 0 et les autres éléments sont tout nth élément après la première. Comme Daniel l'a suggéré vous pouvez utilisermylist[::n]
ce qui signifie que chaque nth élément.Dans votre deuxième fonction de l'indice commence à 0 et
0 % 0
est 0, donc il ne copie pas le premier élément. Il en est de même pour la troisième élément (2 % 2
est 0). Donc tout ce que vous devez faire est denew_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]
Astuce: vous pouvez utiliser
return
au lieu deprint()
dans ces fonctions.OriginalL'auteur knowledge
Disons que vous disposez de la liste :
a = [1,2,3,4,5,6,7,8,9,10]
Si vous voulez tous les k-ième élément, vous pouvez faire quelque chose comme
Exemple avec k=3
La liste actuelle est maintenant
[1, 2, 4, 5, 7, 8, 10]
OriginalL'auteur nono
La sortie est correcte, vous êtes en train de supprimer les éléments avec l'index 0, n, 2n, ... . Donc 1 et 3 sont supprimés, 2 et 4 sont de gauche. Donc, si vous voulez imprimer le 0, n, 2n, ... élément, il suffit d'écrire
OriginalL'auteur Daniel
votre première approche semble bon pour moi, vous devez adapter votre index de début si vous voulez supprimer les éléments 1, 1+n, 1+2n, ... (comme cela semble être le cas):
OriginalL'auteur hiro protagonist
Une autre façon de faire serait de générer une nouvelle liste contenant uniquement les éléments dont vous avez besoin.
Si n 5, ce serait le retour d'une liste contenant les éléments [1,2,3,4,6,7,8,9,11...]
L'avantage de cette façon de faire est que vous gardez votre liste initiale, ce qui est utile si vous prévoyez de réutiliser les données. Toutefois, si vous êtes inquiet à propos de l'enregistrement de la mémoire, puis probablement pas la meilleure.
OriginalL'auteur Eli