python列表方法有哪几种_python-将列表分为n组的另一种方法

干得好:

list_of_groups = zip(*(iter(the_list),) * group_size)

例:

print zip(*(iter(range(10)),) * 3)

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

如果元素的数目不能被N整除,但您仍想包含它们,则可以使用izip_longest,但仅从python 2.6起可用

izip_longest(*(iter(range(10)),) * 3)

结果是生成器,因此如果要打印它,则需要将其转换为列表。

最后,如果您没有python 2.6并使用旧版本,但仍然希望获得相同的结果,则可以使用map:

print map(None, *(iter(range(10)),) * 3)

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

我想在到目前为止介绍的不同方法之间添加一些速度比较:

python -m timeit -s 'from itertools import izip_longest; L = range(1000)' 'list(izip_longest(*(iter(L),) * 3))'

10000 loops, best of 3: 47.1 usec per loop

python -m timeit -s 'L = range(1000)' 'zip(*(iter(L),) * 3)'

10000 loops, best of 3: 50.1 usec per loop

python -m timeit -s 'L = range(1000)' 'map(None, *(iter(L),) * 3)'

10000 loops, best of 3: 50.7 usec per loop

python -m timeit -s 'L = range(1000)' '[L[i:i+3] for i in range(0, len(L), 3)]'

10000 loops, best of 3: 157 usec per loop

python -m timeit -s 'import itertools; L = range(1000)' '[list(group) for key, group in itertools.groupby(L, lambda k: k//3)]'

1000 loops, best of 3: 1.41 msec per loop

列表理解和分组方法显然比zip,izip_longest和map慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值