作者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
1F:推 timTan:真是高深的回答耶~ 08/11 02:35
2F:→ timTan:之前看过一些人这样写,我还不是很能掌握~~~ 08/11 02:37
4F:推 ck574b027:这技巧的确不是很直觉,不过文件有提到所以不会很难找 08/11 06:26
5F:推 timTan:想成 unzip 就好想多了~ 08/11 14:48
6F:推 icycandle:第二个方法真漂亮 08/11 15:20
7F:→ icycandle:不对,Python用这麽神奇的语法真的没问题吗? XD 08/11 15:21
8F:→ sbrhsieh:把zip看成对数据作横(垂直)切割会较易理解 08/11 16:03
9F:→ drm343:其实我对 matrix 这说法有点疑惑,稍微搜寻了一下, 08/12 17:56
10F:→ drm343:才发现 zip 实际上应该是 Convolution 这鬼东西 08/12 17:57
11F:推 grtfor:想问虽然看过很多问题可用zip解,不过不会比generator慢吗? 08/12 21:00
12F:→ drm343:py3 的 zip 就是 generator,不知 py2 情况 08/12 23:04
13F:→ uranusjr:Python 2 是 list, 要用 itertools.izip 才是 generator 08/12 23:26
14F:推 grtfor:感谢两位,原来如此~ 08/12 23:50