python - zip()、*號(hào)、namedtuple

在python里,*號(hào)代表拆分,把list/tuple里的元素拆出來,如:

tu = (1, 2, 3)
print(tu) # (1, 2, 3) tuple
print(*tu) # 1  2  3  各個(gè)元素
li = [(1,2,3), (4,5,6), (7,8,9)] 
print(li) #[ (1,2,3), (4,5,6), (7,8,9) ] 包含tuple的list
print(*li) # (1,2,3)  (4,5,6) (7,8,9) 各個(gè)tuple

zip()的作用是交叉合并元素,就像拉鏈一樣:
list(zip(*li))

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

和numpy.transpose(1,0) 效果是一樣的。zip再zip,就還原:
list(zip(*zip(*li)))

[(1,2,3), (4,5,6), (7,8,9)]

namedtuple是python collection里的一個(gè)類,有些類似于struct,一種簡(jiǎn)單的可以給元素命名的結(jié)構(gòu)體,用法如下:

Friend = namedtuple("Friend",['name','age','email'])
F1 = Friend('giga', 38, 'gaga@qq.com')
print(F1)
print(F1.name, F1[0])
print(F1.age, F1[1])
print(F1.email, F1[2])

Friend(name='giga', age=38, email='gaga@qq.com')
giga giga
38 38
gaga@qq.com gaga@qq.com

同樣,對(duì)待namedtuple Transitions,也可以這樣:

Transition = namedtuple('Transition',('state', 'action', 'next_state', 'reward'))
T1 = Transition('A1', 'B1', 'C1', 'D1')
T2 = Transition('A2', 'B2', 'C2', 'D2')
T3 = Transition('A3', 'B3', 'C3', 'D3')
transitions = (T1, T2, T3)
batch = Transition(*zip(*transitions))
batch

Transition(state=('A1', 'A2', 'A3'), action=('B1', 'B2', 'B3'), next_state=('C1', 'C2', 'C3'), reward=('D1', 'D2', 'D3'))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容