Je veux donc créer une liste qui est une sous-liste d'une liste existante.
Par exemple,
L = [1, 2, 3, 4, 5, 6, 7]
, Je veux créer une sous - liste li
telle que li
contient tous les éléments L
aux positions impaires.
Bien que je puisse le faire en
L = [1, 2, 3, 4, 5, 6, 7]
li = []
count = 0
for i in L:
if count % 2 == 1:
li.append(i)
count += 1
Mais je veux savoir s'il existe une autre façon de faire la même chose efficacement et en moins d'étapes.
Réponses:
Solution
Oui, vous pouvez:
Et c'est tout. Le résultat contiendra les éléments placés sur les positions suivantes (
0
-basées, donc le premier élément est à la position0
, le second à1
etc.):donc le résultat (nombres réels) sera:
Explication
Le
[1::2]
à la fin est juste une notation pour le découpage de liste. Il se présente généralement sous la forme suivante:Si nous omettons
start
, la valeur par défaut (0
) serait utilisée. Donc le premier élément (en position0
, car les index sont0
basés sur) serait sélectionné. Dans ce cas, le deuxième élément sera sélectionné.Étant donné que le deuxième élément est omis, la valeur par défaut est utilisée (la fin de la liste). La liste est donc itérée du deuxième élément à la fin .
Nous avons également fourni un troisième argument (
step
) qui est2
. Ce qui signifie qu'un élément sera sélectionné, le suivant sera ignoré, et ainsi de suite ...Donc, pour résumer, dans ce cas
[1::2]
signifie:step=2
, donc nous en sautons un, contrairement àstep=1
ce qui est par défaut),EDIT : @PreetKukreti a donné un lien pour une autre explication sur la notation de découpage de liste de Python. Voir ici: expliquer la notation de tranche de Python
Extras - remplacement du compteur par
enumerate()
Dans votre code, vous créez et augmentez explicitement le compteur. En Python, ce n'est pas nécessaire, car vous pouvez énumérer à travers certains itérables en utilisant
enumerate()
:Ce qui précède sert exactement le même objectif que le code que vous utilisiez:
En savoir plus sur l'émulation de
for
boucles avec compteur en Python: Accéder à l'index en Python pour les boucles 'for'la source
(0,2,4,6)
; cela ressemble à OP veut des indices(1,3,5)
, qui seraient donnés par[1,2,3,4,5,6,7][1::2]
.1
).list
découpage de Python . Cela diffère un peu, surtout parce que lalist
tranche de s ne garde pas la référence à la liste d'origine (dans Numarray, vous devez appeler explicitement.copy()
pour avoir quelque chose qui ne fait pas référence au tableau d'origine). Mais c'est bien d'avoir quelque chose qui peut être mieux pour certains lecteurs. Pourriez-vous poser ce lien dans le commentaire, afin que je puisse voter pour lui et il apparaîtra juste en dessous de la réponse?Pour les positions impaires , vous voudrez probablement:
la source
J'aime les compréhensions de listes en raison de leur syntaxe Math (Set). Alors que diriez-vous de ceci:
En gros, si vous énumérez sur une liste, vous obtiendrez l'index
x
et la valeury
. Ce que je fais ici, c'est mettre la valeury
dans la liste de sortie (paire ou impaire) et utiliser l'indexx
pour savoir si ce point est impair (x%2 != 0
).la source
Vous pouvez utiliser l'opérateur AND au niveau du bit
&
. Voyons ci-dessous:L'opérateur ET au niveau du bit est utilisé avec 1, et la raison pour laquelle il fonctionne parce que, un nombre impair lorsqu'il est écrit en binaire doit avoir son premier chiffre comme 1. Vérifions
ET l'opération avec 1 ne retournera que 1 (1 en binaire aura aussi le dernier chiffre 1), ssi la valeur est impaire.
Consultez la page Python Bitwise Operator pour en savoir plus.
PS: Vous pouvez utiliser tactiquement cette méthode si vous souhaitez sélectionner des colonnes paires et impaires dans un dataframe. Disons que les coordonnées x et y des points clés faciaux sont données sous forme de colonnes x1, y1, x2, etc ... Pour normaliser les coordonnées x et y avec les valeurs de largeur et de hauteur de chaque image, vous pouvez simplement effectuer
Ce n'est pas exactement lié à la question, mais pour les scientifiques des données et les ingénieurs en vision par ordinateur, cette méthode pourrait être utile.
À votre santé!
la source
liste_ = liste (plage (9)) impression (liste_ [1 :: 2])
la source