Python: itertools.compress()
定义:
itertools.compress()
输入:
iterable对象
相应的Boolean选择器序列
输出:
iterable对象中对应选择器为True的元素
用途:
当需要用另外一个相关联的序列来过滤某个序列的时候,这个函数非常有用
eg:
两个列表如下,其元素相对应,现请根据count输出address,条件只输出count大于5的对应地址:
addresses = [
'5412 N CLARK',
'5148 N CLARK',
'5800 E 58TH',
'2122 N CLARK'
'5645 N RAVENSWOOD',
'1060 W ADDISON',
'4801 N BROADWAY',
'1039 W GRANVILLE',
]
counts = [ 0, 3, 10, 4, 1, 7, 6, 1]
现在想将那些对应count 值大于5 的地址全部输出,可以这样做:
>>> from itertools import compress
>>> more5 = [n > 5 for n in counts]
>>> more5
[False, False, True, False, False, True, True, False]
>>> list(compress(addresses, more5))
['5800 E 58TH', '4801 N BROADWAY', '1039 W GRANVILLE']
这里的关键点在于先创建一个booleam序列,指示出哪些元素符合条件,然后compress()根据这个序列去选择输出对应位置为True的元素。
compress()返回的是一个迭代器,如果想得到一个列表,需要用list转换