2 votes

Substitution d'un élément de liste/dictionnaire par l'index dans Hy

Existe-t-il un moyen de substituer une valeur à un élément d'une liste ou d'un dictionnaire par l'index dans Hy ? Le site nth ne semble pas correspondre au crochet de Python.

Je m'attendais à la traduction suivante.

(setv lst [1 2 3])
(setv (nth lst 1) 20)

lst=[1, 2, 3]
lst[1]=20

1voto

Arnav Borborah Points 7947

Selon la documentation vous devez utiliser l'option assoc pour définir une valeur à un index spécifique dans une liste. En tant que tel, votre code devrait être :

(assoc lst 1 20)

Cela devrait donner le résultat souhaité.

1voto

gilch Points 3975

Outre assoc Hy peut également utiliser setv sur un get formulaire spécial ou sur un . avec le formulaire [] pour définir un index ou une clé.

$ hy --spy  # Shows Python translation.
[...]
=> (setv lst [1 2 3])
lst = [1, 2, 3]
None

=> (setv (. lst[1]) 20)
lst[1] = 20
None

=> lst
lst

[1, 20, 3]
=> (setv (get lst 2) 30)
lst[2] = 30
None

=> lst
lst

[1, 20, 30]

Bien sûr, ces opérateurs sont en fin de compte soutenus par la Commission européenne. __setitem__ que vous pouvez appeler comme n'importe quelle autre méthode.

=> (.__setitem__ lst 0 10)
lst.__setitem__(0, 10)

=> lst
lst

[10, 20, 30]

Utilisation de __setitem__ directement n'est pas recommandé par rapport aux autres formes susmentionnées, mais il peut parfois être utile dans les fonctions d'ordre supérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X