用 Hy 中的索引替换 list/dictionary 元素
Substitution of list/dictionary element by the index in Hy
有什么方法可以用Hy中的索引替换列表或字典元素的值吗?
nth
函数好像不对应Python的方括号。
我期待的是下面的翻译。
(setv lst [1 2 3])
(setv (nth lst 1) 20)
lst=[1, 2, 3]
lst[1]=20
根据 the documentation,您必须使用 assoc
函数在列表中的特定索引处设置值。因此,您的代码应该是:
(assoc lst 1 20)
这应该会给出预期的结果。
除了 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__
,但它有时在高阶函数中很有用。
有什么方法可以用Hy中的索引替换列表或字典元素的值吗?
nth
函数好像不对应Python的方括号。
我期待的是下面的翻译。
(setv lst [1 2 3])
(setv (nth lst 1) 20)
lst=[1, 2, 3]
lst[1]=20
根据 the documentation,您必须使用 assoc
函数在列表中的特定索引处设置值。因此,您的代码应该是:
(assoc lst 1 20)
这应该会给出预期的结果。
除了 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__
,但它有时在高阶函数中很有用。