dans Python, je peux trancher une matrice avec "pas de saut". Exemple: peut le faire? P> p>
3 Réponses :
a = [1,2,3,4,5,6,7,8,9] a.values_at(*(1..23).step(2)) #=> [2, 4, 6, 8, nil, nil, nil, nil, nil, nil, nil, nil]
+1, c'est celui. J'ai écrit une réponse avec valides_at (* (1 ... 7) .step (2)) code> et ensuite j'ai vu le vôtre :-) Peut-être que c'est mieux 1 ... 7 code > utiliser 7 (le numéro de l'OP mentionne) au lieu de 6.
@tokland Merci pour votre commentaire, je viens de mettre à jour votre commentaire.
@ J3ster ne modifie pas la réponse. Utilisez plutôt une boîte de commentaires pour dire à l'auteur comment il peut améliorer cela.
en rubis, pour obtenir la même sortie:
a = [1,2,3,4,5,6,7,8,9]
(1...7).step(2).map { |i| a[i] }
=> [2, 4, 6]
Si vous manquez vraiment la syntaxe de la tranche de Python Slice, vous pouvez obtenir un rubis pour faire quelque chose de très similaire.
class Array
alias_method :brackets, :[]
def [](*args)
return brackets(*args) if args.length != 3
start, stop, step = *args
self.values_at(*(start...stop).step(step))
end
end
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr[1,7,2]
#=> [2, 4, 6]
Python permet d'omettre l'un des arguments, A [2 :: 3] code> par exemple.
Réponse courte: Non avec une notation sténographique no.
Votre exemple n'est pas bon car il n'est pas clair si vous souhaitez ignorer les valeurs ou les indices (probablement le dernier).
Si c'était une boucle dans une autre langue, il souhaite que le
i ++ code> soiti + 2 code> pour chaque itération dans ce cas.Votre sortie semble être fausse. Si vous commencez à index = 1 à index = 7, avec étapes = 2, vous devriez obtenir [2, 4, 6, 8].
@sawa Je suis désolé, je suis un débutant à Python aussi. Indexer <7. Je cours à Ipython.
@sawa - essayé en python. Apparemment c'est comme ça que ça marche.
@seph Je voulais dire la compatibilité entre la description et la sortie attendue.