作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] 初学者list问题 l[:,var]
时间Thu Sep 12 14:43:38 2019
※ 引述《st1009 (前端攻城师)》之铭言:
: a[:,var] 这种list的用法该如何理解?这种语法是否有他的名字可以告诉我嘛>///<
: 实在不知道该怎查这种用法...
: 我知道[:]叫作slice,譬如a = [1,2,3]
: 用a[1:]会得到[2,3]
: 但多一个","就不懂了...
1F:→ st1009: 了解了,谢谢大家,我一直把他当成python自己的语法糖,难 09/11 21:23
2F:→ 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')
--
"问おう、贵方が私のマスターか?"
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.227.171.207 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1568270620.A.947.html
3F:推 TitanEric: 推推 09/12 15:26
4F:推 rexyeah: 长知识 09/12 15:28
5F:推 st1009: 推推长知识 09/13 00:13
6F:→ s860134: 哈 完全没想到是 slice 和 tuple 09/13 06:25