用Hy中的索引替换list/dictionary元素

2024-09-22 16:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法用Hy中的索引替换list或dictionary元素的值? nth函数似乎与Python的方括号不对应。你知道吗

我原以为你会喜欢下面的翻译。你知道吗

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

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

Tags: 函数元素dictionarylistlst办法hy方括号
2条回答

除了assoc,Hy还可以在get特殊形式上使用setv,或者在.形式上使用[]语法设置索引或键。你知道吗

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

当然,这些操作符最终由__setitem__方法支持,您可以像调用任何其他方法一样调用它。你知道吗

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

=> lst
lst

[10, 20, 30]

直接使用__setitem__并不比前面提到的其他形式更可取,但它有时在高阶函数中很有用。你知道吗

根据the documentation,必须使用assoc函数在列表中的特定索引处设置值。因此,您的代码应该是:

(assoc lst 1 20)

这应该会产生预期的结果。你知道吗

相关问题 更多 >