Je suis très nouveau en Python et j'ai du mal à convertir mes pensées en syntaxe.
Voici le problème qui m'a été posé:
Étant donné un tableau 1 par n a, écrivez une fonction odd (a) pour renvoyer un nouveau tableau contenant des éléments dont l'index est un nombre impair. p >
[1, 3, '', '', 5, 3, '', 1]
et voici ce que j'ai jusqu'à présent:
def odd(a): return ['' if x%2==0 else x for x in a]
Ceci, cependant, renvoie:
a = np.array([1, 3, 4, 2, 5, 3, 8, 1]) odd(a) = array([3, 2, 3, 1])
Comment puis-je simplement ignorer cet élément?
3 Réponses :
Utilisez enumerate
pour parcourir l'élément et son index simultanément et avec la condition index% 2
pour extraire toutes les valeurs de position impaires:
import numpy as np def odd(a): return [x for i, x in enumerate(a) if i % 2] a = np.array([1, 3, 4, 2, 5, 3, 8, 1]) print(odd(a)) # [3, 2, 3, 1]
p>
Je vous remercie! Que signifie?
@MimiChung, c'est un opérateur de mod, trouvant essentiellement le reste de l'opération de division. S'il y a un reste quand un nombre est divisé par 2, alors le nombre est certainement un nombre impair.
import numpy as np odd = lambda a: [a[i] for i in range(len(a)) if i%2] a = np.array([1, 3, 4, 2, 5, 3, 8, 1]) print(odd(a)) # -> [3, 2, 3, 1]
Utilisez slice and step (voir la référence ici: Comprendre la notation de tranche ):
def odd(a): return a[1::2] #=> [3 2 3 1]
Je pensais faire cela au début, mais je ne savais même pas comment écrire l'incrément! Je vous remercie
Déplacez le conditionnel à la fin de la compréhension de la liste, où il filtre au lieu de mapper:
pour x dans un if x% 2 == 0
.De plus,
x
n'est pas l'index de votre élément mais l'élément lui-même.La chose clé à noter est qu'un "if else" vient avant "for" dans la compréhension de liste, mais un pur "if" va à la fin. Il suffit de s'habituer à la syntaxe.
@jonrsharpe Bon point. Il peut être plus facile de lire et de comprendre la syntaxe de compréhension en réfléchissant à la façon dont vous écririez l'expression pour l'ensemble en mathématiques. Soudain, la notation avec le si à la fin devient intuitive.