8
votes

Liste complexe Slice / Index en Python

J'ai une liste qui ressemble à ceci:

lst[1, 5, 6, 8, 9, 12] # slice a list by index


0 commentaires

5 Réponses :


16
votes

11 commentaires

Avec une tranche, vous pouvez modifier la liste sous-jacente. Pouvez-vous faire cela avec pointGetter?


* Mumble Mumble * "Une façon de le faire" * Mumble Mumble Mumble *;)


@DavidHeffernan: Vous ne pouvez pas l'utiliser comme cible d'affectation de gauche, no.


Étant donné que la question mentionne explicitement la tranchée, vous devriez peut-être mentionner l'affectation de gauche dans la réponse


@DavidHeffernan: C'est est une tranche, tout comme une tranche mec de .


Ce n'est pas une tranche de python . C'est une tranche générique.


@DavidHeffernan: Je couvre Simple Trancheur ici, en tant qu'expression primaire , Exclusément exclu assignation de tranche . Je ne sais pas de quoi vous parlez maintenant, dans tous les cas. :-)


Je veux dire que SLICE est un terme précis et spécifique en Python. Tel que défini par le lien dans votre commentaire précédent. Et itemGetter n'est pas un python épissure . Bien qu'il ait une très forte fonctionnalité se chevauchent. Quoi qu'il en soit, votre mise à jour est bonne!


@DavidHeffernan: 'SLICE' pourrait également signifier une tranche étendue (non prise en charge par Python la liste ), laquelle fait autorise un [index1, index2 ,. ., Indexn] Notation. Le résultat d'une expression de tranche est une nouvelle liste, et c'est ce que je pense que l'OP est après. :-) Le Autre L'utilisation d'une tranche est comme une cible d'attribution, ce qui est ce que je pense que vous voulez dire, et c'est beaucoup hors de portée ici. Il suffit de faire trier notre terminologie ici, je pense! :-)


Juste pour le record: a [index1, index2,


@Wolframh: un peu, sorta; Tranchement étendu entraîne essentiellement __ getItem __ appelé avec un argument dans tous les cas, ce qui peut être une liste d'objets en tranches. :-)



1
votes

J'irais avec l'opérateur Opérateur.Itemplgeter () Méthode que Martijn Pieters a suggéré, mais voici une autre façon (pour la complétude) xxx


0 commentaires

5
votes

Les tableaux numpus ont ce type de syntaxe de découpage:

In [45]: import numpy as np

In [46]: lst = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])

In [47]: lst[[1, 5, 6, 8, 9, 12]]
Out[47]: array([ 2,  6,  7,  9, 10, 13])


0 commentaires

0
votes

Une tranche de python vous permet de faire la tranche de la cible d'une affectation. Et la syntaxe de tranches de python ne permet pas des tranches avec des motifs irréguliers d'indices. Donc, si vous voulez faire une tranche de "personnalisation", la cible d'une affectation, ce n'est pas possible avec la syntaxe Python Slice.

Si vos exigences sont remplies en prenant une copie des éléments spécifiés, alors opérateur.Itemplgetter () répond à vos besoins. Si vous avez besoin d'une affectation des tranches, les tranches numpées sont une bonne option.


0 commentaires

1
votes

C'est facilement et facilement effectué à l'aide d'une compréhension de liste.

lst = range(1, 14)
indices = [1, 5, 6, 8, 9, 12]
filtered_lst = [lst[i] for i in indices]


0 commentaires