Re: [问题] 初学者list问题 l[:,var]

楼主: uranusjr (←這人是超級笨蛋)   2019-09-12 14:43:38
※ 引述《st1009 (前端攻城师)》之铭言:
: a[:,var] 这种list的用法该如何理解?这种语法是否有他的名字可以告诉我嘛>///<
: 实在不知道该怎查这种用法...
: 我知道[:]叫作slice,譬如a = [1,2,3]
: 用a[1:]会得到[2,3]
: 但多一个","就不懂了...
→ st1009: 了解了,谢谢大家,我一直把他当成python自己的语法糖,难 09/11 21:23
→ st1009: 怪查不到,谢谢<(_ _)> 09/11 21:23
其实这完全是合法的 Python 语法糖没错
那个逗号是 tuple 的逗号
>>> 1,2
(1, 2)
写成这样大概就比较容易懂:a[(:, var)]
冒号就如你所理解是 slice
Python 允许省略冒号前后的参数 (会使用默认值 None)
>>> a = [1, 2, 3]
>>> a[None:None] == a[:]
True
所以你的式子可以继续进一步展开成 a[(slice(None, None, None), var)]
这样子意义应该就很明显了吧
====
会让你困惑的原因大概是由于 Python 没有任何内建型别可以处理这样的参数
但是我们可以自行建构一个有这种功能的型别(也就是 Pytorch 做的事情)
class A:
def __getitem__(self, k):
# XXX: Return a useful value.
return k
>>> a = A()
>>> a[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
>>> a[:,'x']
(slice(None, None, None), 'x')
>>> a[1:9,'y']
(slice(1, 9, None), 'y')
作者: st1009 (前端攻城师)   2018-09-11 21:23:00
了解了,谢谢大家,我一直把他当成python自己的语法糖,难怪查不到,谢谢<(_ _)>
作者: TitanEric (泰坦)   2019-09-12 15:26:00
推推
作者: rexyeah (ccccccc)   2019-09-12 15:28:00
长知识
作者: st1009 (前端攻城师)   2019-09-13 00:13:00
推推长知识
作者: s860134 (s860134)   2019-09-13 06:25:00
哈 完全没想到是 slice 和 tuple

Links booklink

Contact Us: admin [ a t ] ucptt.com