作者uranusjr (←這人是超級笨蛋)
看板Python
標題Re: [問題] list 一問
時間Sun Aug 11 00:14:52 2013
※ 引述《aety0129 (Chen)》之銘言:
: 我想要把list中的數據拿出來做分割是可以的嗎?
: list = ['101/01', '102/02', '103/03', '104/04', '105/05', '106/06']
: 分割成這樣
: a = ['101', '102', '103' '104', '105', '106']
: b = ['01', '02', '03', '04', '05', '06']
: 找了一下都是不太相同的用法... 請求支援
如果你只是要割開...
>>> l = ['101/01', '102/02', '103/03', '104/04', '105/05', '106/06']
>>> [i.split('/') for i in l]
[['101', '01'], ['102', '02'], ['103', '03'], ['104', '04'], ['105', '05'],
['106', '06']]
如果你一定要分成兩個 lists...
>>> a, b = zip(*[i.split('/') for i in l])
>>> a
('101', '102', '103', '104', '105', '106')
>>> b
('01', '02', '03', '04', '05', '06')
官方文件就有提到 zip 搭配 * 可以達到 unzip 功能
這點還滿酷的...
不過我必須承認我也是 Google 之後才發現這件事情
http://stackoverflow.com/questions/19339/
另外如同連結裡提到, 參數展開在陣列太大的時候會有問題
(因為參數必須在解析時被完整展開, 無法使用 iterator)
如果有大量資料處理需求的話, 可以考慮連結裡面的另一個解搭配 generator 使用
--
「我最想要的同伴嘛,首先是要笑口常開,其次是我們能永遠不會發生誤會。
如果這些都能辦到的話,嗯,如果他是世界上第一流的橋手,也還不錯。」
-- 班尼多‧加羅素,前義大利藍隊成員
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
推 timTan:真是高深的回答耶~ 08/11 02:35
→ timTan:之前看過一些人這樣寫,我還不是很能掌握~~~ 08/11 02:37
推 ck574b027:這技巧的確不是很直覺,不過文件有提到所以不會很難找 08/11 06:26
推 timTan:想成 unzip 就好想多了~ 08/11 14:48
推 icycandle:第二個方法真漂亮 08/11 15:20
→ icycandle:不對,Python用這麼神奇的語法真的沒問題嗎? XD 08/11 15:21
→ sbrhsieh:把zip看成對數據作橫(垂直)切割會較易理解 08/11 16:03
→ drm343:其實我對 matrix 這說法有點疑惑,稍微搜尋了一下, 08/12 17:56
→ drm343:才發現 zip 實際上應該是 Convolution 這鬼東西 08/12 17:57
推 grtfor:想問雖然看過很多問題可用zip解,不過不會比generator慢嗎? 08/12 21:00
→ drm343:py3 的 zip 就是 generator,不知 py2 情況 08/12 23:04
→ uranusjr:Python 2 是 list, 要用 itertools.izip 才是 generator 08/12 23:26
推 grtfor:感謝兩位,原來如此~ 08/12 23:50