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