比这篇新的文章: TOJ P1072 输出你自己的代码
比这篇旧的文章: 题目:编程计算从1到2008080808之间的整数有多少个含有数字7

list转为一组tuple的方法

语言: Python, 标签: 无  2008/08/24发布 2个月前更新 更新记录
作者: 半瓶墨水, 点击412次, 评论(2), 收藏者(0)

开关行号, 全选(Ctrl+C复制) | 一键复制:HTML, BBCode(Discuz!) , 源代码 | 查看:裸代码, 全屏
背景
主题: 字体:
Python语言: list转为一组tuple的方法
01 #From 半瓶墨水: 不是很容易懂的for
02 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
03 length = len(a)
04 b = [(a[i], a[i+1], a[i+2]) for i in range(0, length) if i % 3 == 0]
05 print b
06
07 #From 3751( http://wmlin.ycool.com/ )
08 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
09 length = len(a)
10 b = [(a[i], a[i+1], a[i+2]) for i in range(0, length, 3)]
11 print b
12
13 #讨论帖:http://groups.google.com/group/python-cn/browse_thread/thread/1143a09fadb76c02#
14 #from Leo #1:
15 def group(seq, size):
16    if not hasattr(seq, 'next'):
17        seq = iter(seq)
18    while True:
19        yield [seq.next() for i in xrange(size)]
20
21 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
22 for i, j, k in group(a, 3):
23     print i, j, k
24
25 #From Leo #2:
26 #要是不想另写一个函数的话,也可以这样:
27 a = range(12)
28 for i, j, k in zip(a[::3], a[1::3], a[2::3]):
29     print i, j, k
30
31 #From Leo #3:
32 #兼顾速度与灵活性的版本出炉:
33 s2 = '''for i, j, k in group(a, 3): pass'''
34
35 s2setup = '''
36 from itertools import izip, chain
37 def group(seq, size):
38    return izip(*[chain(seq)]*size)
39
40 a = range(300)
41 '''
42
43 #话说,我最喜欢Leo#2,完全符合我的要求:简洁高效易读懂
打分:

所有评论,共2条:( 我也来说两句)

1
3751 2个月前 回复
0
0
为啥半瓶墨水版的不用for i in range(0, length, 3)?
另外怎么没考虑length不是3的整数倍的情况?
2
半瓶墨水 2个月前 回复
0
0
@1: 建议不错,已加入
length是3的整数倍,这是我这个题目的假设条件。因为这是内部函数,这样做不会有问题的。

发表评论

注册登录后再发表评论