7
votes

Tableau divisé en sous-maquette à l'étape de Ruby

dans Python, je peux trancher une matrice avec "pas de saut". Exemple: xxx

peut le faire?


7 commentaires

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 ++ soit i + 2 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.


3 Réponses :


7
votes
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]

3 commentaires

+1, c'est celui. J'ai écrit une réponse avec valides_at (* (1 ... 7) .step (2)) et ensuite j'ai vu le vôtre :-) Peut-être que c'est mieux 1 ... 7 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.



3
votes

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] 


0 commentaires

2
votes

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]


1 commentaires

Python permet d'omettre l'un des arguments, A [2 :: 3] par exemple.