M = [[1,2,3],
[4,5,6],
[7,8,9]]
col2 = [row[1] + 1 for row in M if row[1] % 2 == 0]
print (col2)
Sortie: [3, 9]
nombres impairs Filtrage
Je me attends à filtrer les nombres impairs, mais il fait le contraire.
M = [[1,2,3],
[4,5,6],
[7,8,9]]
col2 = [row[1] + 1 for row in M if row[1] % 2 == 0]
print (col2)
Sortie: [3, 9]
nombres impairs Filtrage
Je me attends à filtrer les nombres impairs, mais il fait le contraire.
Le code fait exactement ce que vous attendez - si le second élément est pair, augmentez-le d'une unité et placez-le dans la liste. Donc, pour la première ligne, on voit que 2% 2 == 0 est vrai, et col2 [0] = 2 + 1 = 3. Pour la deuxième ligne, 5% 2 == 0 est faux. Pour la troisième ligne, 8% 2 == 0 est vrai, et col2 [1] = 8 + 1 = 9.
Oh, donc il lit d'abord l'instruction IF? Je pensais que les déclarations ont été traitées gauche-t-droite? – 3zzy
Oui - les compréhensions de liste autorisent plusieurs conditions après la boucle for, et l'expression sur la gauche est évaluée après avoir pris en compte toutes ces conditions. (explication technique: http://docs.python.org/reference/expressions.html#list-displays) –
Vous testez row[1]%2
, mais l'impression row[1]+1
donc quand row[1]==2
, il est même, mais vous apposent 3
au résultat
quand row[1]==5
, il est étrange, de sorte que vous la filtrer sur
et quand row[1]==8
, il est même, mais vous apposent 9
au résultat
Je crois que vous devez changer la comparaison à == 1
à partir de == 0
.
Le module de n'importe quel nombre divisé par 2 est 0 ou 1, 1 quand il est impair.
Hmm..pas vraiment. J'ai essayé ceci: pour n dans la gamme (10): n = n% 2 et il a imprimé ODD comme '0' – 3zzy
M = [[1,2,3],
[4,5,6],
[7,8,9]]
col2 = []
for row in M:
if row[1]%2 == 1:
col2.append(row[1])
print col2
Aiderait si vous avez posté votre sortie prévue à l'avenir –