包含用于操作可迭代对象的实用函数的库
项目描述
包含用于操作可迭代对象的实用函数的库。
灵感来源于Python itertools的食谱和Ruby的Enumerable API。
适用于Python 2.6+和3.x。
自由软件:BSD许可证
特性
each_cons
each_cons(sequence, size)
懒惰地遍历一个序列,每次迭代返回给定大小的滑动窗口。
示例
计算季度销售报告
>>> import jk >>> month_sales = [123.45, 54.3, 428.1, 144.2, 245.45, 197.3] >>> for a, b, c in jk.each_cons(month_sales, 3): ... print '%0.2f' % ((a + b + c)/3) ... 201.95 208.87 272.58 195.65
在文件中查找重复行
>>> lines = """here is a simple
... file for us to test.
... this line repeats
... this line repeats
... -- this one does not
... this one repeats too
... this one repeats too
... okay, we're done here""".split('\n')
>>>
>>> for ln, (a, b) in enumerate(jk.each_cons(lines, 2), 1):
... if a == b:
... print (ln, a)
...
(3, 'this line repeats')
(6, 'this one repeats too')
slice_before和slice_after
slice_before(predicate, sequence)
slice_after(predicate, sequence)
这些函数在处理具有某种类型分隔符的流时非常有用。例如,用于解析日志文件。
它们懒惰地遍历一个序列,返回一个元组,包含在谓词评估为True之前(或之后)切割的元素。
谓词参数也可以是一个字符串或正则表达式模式,用于匹配序列元素。
示例
分组数字直到为零
>>> numbers = [1, 2, 3, 0, 4, 5, 0, 6, 0, 7, 8] >>> print list(jk.slice_after(lambda x: x == 0, numbers)) [(1, 2, 3, 0), (4, 5, 0), (6, 0), (7, 8)]
读取多行日志文件的条目
>>> log_lines = """START: initiating...
... kernel found
... EVENT: started
... moving on
... EVENT: something happened
... EVENT: another thing happened""".split('\n')
>>>
>>> for entry in jk.slice_before('^(START|EVENT):', log_lines):
... print entry
...
('START: initiating...', 'kernel found')
('EVENT: started', 'moving on')
('EVENT: something happened',)
('EVENT: another thing happened',)
first, second和nth
first(sequence, default=None)
返回序列的第一个元素(如果序列为空,则返回默认值)。
second(sequence, default=None)
返回序列的第二个元素(如果不存在,则返回默认值)。
nth(sequence,n,default=None)
返回序列的第n个元素(如果不存在,则返回默认值)。
注意,参数n不是基于0的索引:它是一个序数,因此n=1表示第一个元素,n=4表示第四个元素,依此类推。
历史
0.1.0 (2014-11-23)
首次发布在PyPI上。
项目详情
关闭
jk-0.1.0.tar.gz的散列值
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 8d9d1cd49a2ebc9b03c312a582fb5c339881362ceb8ff82463ac189fdc014c47 |
|
| MD5 | c956717951dc880b22718ae81e9987ac |
|
| BLAKE2b-256 | 2b03058205838ea6739b3ed9cf67485bc6b28a197450c26a06c0aa47a6c27d38 |