惰性无限缓存序列

infseq的Python项目详细描述


Travis CI status

python的无限序列

infseq模块为python 3实现缓存的惰性无限序列。

这里,单词“lazy”意味着序列的值永远不会被计算出来 除非它们真的被使用,“cached”一词意味着每个值 计算不超过一次。

序列可以包含任何类型的项,例如数字、字符串甚至 其他序列。

使用这个模块非常简单-一切都正常。这是 一些用法示例:

创建序列

>>>frominfseqimportInfSequence>>>InfSequence(5)<InfSequence:555555...>>>>InfSequence(5,6,...)<InfSequence:5678910...>>>>InfSequence(lambdaindex:index*2+1)<InfSequence:1357911...>>>>InfSequence.geometric_progression(3)<InfSequence:1392781243...>>>>InfSequence.cycle('a','b','c')<InfSequence:'a''b''c''a''b''c'...>>>>InfSequence.fibonacci()<InfSequence:011235...>

注意:为了便于调试,在 repr()在序列上被调用。如果你只是在没有 打印时,不计算值。项目数量可以调整 通过修改infseq.REPR_VALUES数字(默认设置为6)。

检索值

>>>a=InfSequence.geometric_progression(2)>>>a<InfSequence:12481632...>>>>a[10]1024>>>a.partial_sum(10)# a[0] + ... + a[9]1023>>>a.partial_sum(4,10)# sum(a[i] for i in range(4, 10))1008>>>a.partial_product(5)# a[0] * ... * a[4]1024

切片和预处理元素

>>>a[5:]<InfSequence:32641282565121024...>>>>a[::2]<InfSequence:1416642561024...>>>>list(a[5:10])# a[5:10] returns a map object, because of laziness[32,64,128,256,512]>>>list(a[4::-1])# reverse slices also work[16,8,4,2,1]>>>(5,7)+a<InfSequence:571248...>

算术运算

>>>b=InfSequence(1,2,...)>>>b<InfSequence:123456...>>>>b*2<InfSequence:24681012...>>>>b**2<InfSequence:149162536...>>>>a+b<InfSequence:247122138...>

应用任何函数

>>>c=InfSequence.geometric_progression(9)>>>c<InfSequence:1981729656159049...>>>>importmath>>>c.apply_function(math.sqrt)<InfSequence:1.03.09.027.081.0243.0...>

使用accumulate方法

accumulate方法返回原始值的部分和序列 序列(类似于itertools.accumulate):

result[0] = a[0]
result[1] = a[0] + a[1]
result[2] = a[0] + a[1] + a[2]
...

如果自定义函数作为参数传递,则使用它来执行 约化函数而不是和函数。

在下面的例子中,我们可以得到n(n+1)/2的序列和 n!使用此方法:

>>>fromoperatorimportmul>>>b<InfSequence:123456...>>>>b.accumulate()<InfSequence:136101521...>>>>b.accumulate(mul)<InfSequence:12624120720...>

使用矩阵乘法运算符

如果您使用的是Python3.5+,则可以使用新的“矩阵乘法” 在那个版本中引入的运算符。

表达式a @ b将产生以下结果:

result[0] = a[0] * b[0]
result[1] = a[0] * b[1] + a[1] * b[0]
result[2] = a[0] * b[2] + a[1] * b[1] + a[2] * b[0]
...

示例:

>>>InfSequence(0,2,...)@InfSequence(1)<InfSequence:149162536...>

安装模块并运行测试

该模块在PyPI上可用。要安装模块,只需使用:

pip3 install infseq

源代码托管在GitHub上。

要在此模块中运行doctests,请使用:

python3 -m doctest ./README.rst

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android中Axis2 web服务的java解析响应   java读取Dockerfile命令时遇到问题:是否可以将cd刻录到jar文件中?那么tarcf是做什么的呢?   java如何防止gcmTaskService periodicTask在上一个任务尚未完成时再次运行?   jquery希望使用Java生成自动登录程序   在Hibernate中检索用BigInteger映射的属性时出现java问题   与错误用户连接时发生java错误   java Hibernate+c3p0池+ehcache失败启动   JAVAlang.ClassNotFoundException:org。mysql。JDBC无法解决,添加了mysql连接器   java如何在其键包含JSTL中的点时访问映射值?   packageprivate类中的Java方法可访问性?   java如何将文件转换为StorageObject(谷歌API)   java apache commons httpclient 4.23表单登录问题不同请求中使用的不同会话cookie   所有组件的java一个侦听器instance或每个组件的一个实例   重新启动应用程序后,不会保存ListView中的java更新   java如何修复libgdx中的屏幕无渲染   java在使用mongotemplate时遇到ClassNotFound异常