itertools模块

itertools模块在python中处理可迭代的对象很方便。

itertools模块方法

itertools.dropwhile

参数 predicate, iterable
创建一个迭代器,只要函数predicate(item)为True,就丢弃iterable中的项,如果predicate返回False,就会生成iterable中的项和所有后续项。

等价实现:

def dropwhile(predicate, iterable):
	iterable = iter(iterable)
	for x in iterable:
		if not predicate(x):
			yield x
			break
	for x in iterable:
		yield x

使用示例

from itertools import dropwhile

def should_drop(x):
	print 'test:', x
	return (x < 1)


for i in dropwhile(should_drop, [-1, 0, 1, 2, 3, 4, 1, -2]):
	print 'yield', i

Test: -1  
Test: 0  
Test: 1  
Yield: 1  
Yield: 2  
Yield: 3  
yield: 4  
yield: 1  
yield: -2  
takewhile

创建一个迭代器,生成iterable中predicate(item)为True的项,只要predicate计算为False,迭代就会立即停止。 即:从序列的头开始,直到执行函数func失败。

def takewhile(predicate, iterable):
	for x in iterable:
		if predicate(x):
			yield x
		else:
			break

使用

from itertools import *

def should_take(x):
	print 'Testing:', x
	return (x < 2)

for i in takewhile(should_take, [-1, 0, 1, 2, 3, 4, 1, -2]):
	print 'Yielding:', i


Testing: -1
Yielding: -1
Testing: 0
Yielding: 0
Testing: 1
Yielding: 1
Testing: 2