一个全面的高性能排列库。

permuta的Python项目详细描述


TravisCoverallsPyPIhttps://img.shields.io/pypi/l/Permuta.svghttps://img.shields.io/pypi/pyversions/Permuta.svgTravisRequirements Status

permuta是一个用于处理perms(permutation的缩写)的python库, 图案和网格图案。

安装

要在系统上安装Permuta,请运行:

pip install permuta

也可以在开发模式下安装permuta来处理 源代码,在这种情况下,克隆存储库后运行以下命令:

./setup.py develop

运行单元测试:

pip install -r test_requirements.txt
./setup.py test

使用permuta

一旦安装了permuta,就可以通过python脚本或 交互式python会话,就像任何其他python库一样:

>>>frompermutaimport*

从中导入*将为您提供“perm”和“permset” 类以及用于生成 烫发避免一组图案。它还为你提供了“meshpatt”课程 以及本自述中我们将不讨论的其他子模块。

创建单个烫发

置换在置换中是基于零的,可以使用任何iterable创建。

>>>Perm()# Empty permPerm(())>>>Perm([])# Another empty permPerm(())>>>Perm((0,1,2,3))# The zero-based version of 1234Perm((0,1,2,3))>>>Perm((2,1,3))# Warning: it will initialise with any iterablePerm((2,1,3))>>>Perm((2,1,3),check=True)# If you are unsure, you can checkTraceback(mostrecentcalllast):...ValueError:Elementoutofrange:3>>>Perm((4,2,3,0,0),check=True)Traceback(mostrecentcalllast):...ValueError:Duplicateelement:0>>>Perm("123",check=True)Traceback(mostrecentcalllast):...TypeError:''1''objectisnotaninteger

置换也可以使用一些特定的类方法创建。

>>>Perm.from_string("201")# stringsPerm((2,0,1))>>>Perm.one_based((1,3,2,4))# one-based iterable of integersPerm((0,2,1,3))>>>Perm.to_standard("a2gsv3")# standardising any iterable using '<'Perm((2,0,3,4,5,1))>>>Perm.from_integer(210)# an integer between 0 and 9876543210Perm((2,1,0))>>>Perm.from_integer(321)# any integer given is standardisedPerm((2,1,0))>>>Perm.from_integer(201)Perm((2,0,1))

打印烫发会给出基于零的字符串。

>>>print(Perm(()))ε>>>print(Perm((2,1,0)))210>>>print(Perm((6,2,10,9,3,8,0,1,5,11,4,7)))62(10)938015(11)47

“避免”、“包含”和“发生”方法允许使用模式:

>>>p=Perm((0,2,1,3))>>>p.contains(Perm((2,1,0)))False>>>p.avoids(Perm((0,1)))False>>>list(p.occurrences_of(Perm((1,0))))[(1,2)]>>>list(Perm((0,1)).occurrences_in(p))[(0,1),(0,2),(0,3),(1,3),(2,3)]

实现了基本的对称性:

>>>[p.reverse(),p.complement(),p.inverse()][Perm((3,1,2,0)),Perm((3,1,2,0)),Perm((0,2,1,3))]

为了得到直接和和和和和和,我们使用+-

>>>q=Perm((0,1,2,3,4))>>>p+qPerm((0,2,1,3,4,5,6,7,8))>>>p-qPerm((5,7,6,8,0,1,2,3,4))

有许多实用方法可供选择:

>>>list(p.fixed_points())[0,3]>>>list(p.ascents())[0,2]>>>list(p.descents())[1]>>>list(p.inversions())[(1,2)]>>>p.major_index()2

创建perm类

您可能需要所有烫发的设置:

>>>all_perms=PermSet()>>>print(all_perms)<Thesetofallperms>

perm类可以用basis指定:

>>>basis=[Perm((1,0,2)),Perm((1,2,0))]>>>basis[Perm((1,0,2)),Perm((1,2,0))]>>>perm_class=Av(basis)>>>perm_classAv((Perm((1,0,2)),Perm((1,2,0))))

当基由单个元素组成时,可以直接传递给av

>>>q=Perm((1,0))>>>len(Av(q).of_length(100))1

您可以询问烫发是否属于烫发类:

>>>Perm((3,2,1,0))inperm_classTrue>>>Perm((0,2,1,3))inperm_classFalse

您可以获取类的第n个perm或迭代:

>>>sorted([perm_class[n]forninrange(8)])[Perm(()),Perm((0,)),Perm((0,1)),Perm((1,0)),Perm((0,1,2)),Perm((0,2,1)),Perm((2,0,1)),Perm((2,1,0))]>>>perm_class_iter=iter(perm_class)>>>sorted([next(perm_class_iter)for_inrange(8)])[Perm(()),Perm((0,)),Perm((0,1)),Perm((1,0)),Perm((0,1,2)),Perm((0,2,1)),Perm((2,0,1)),Perm((2,1,0))]

(谨防:Lexicographic订单目前无法保证!)

perm类的子集,其中perm是特定长度

可以在perm类中定义特定长度的perm的子集:

>>>perm_class_14=perm_class.of_length(14)>>>perm_class_14Av((Perm((1,0,2)),Perm((1,2,0)))).of_length(14)

您可以要求子集的大小,因为它保证是有限的:

>>>len(perm_class_14)8192

迭代和包含功能与perm_类相同, 但是索引还有待实现:

>>>Perm((2,1,0))inperm_class_14False>>>Perm((0,13,1,12,2,3,4,11,5,10,6,7,8,9))inperm_class_14True>>>Perm(range(10))-Perm(range(4))inperm_class_14False>>>next(iter(perm_class_14))inperm_class_14True

许可证

bsd-3:请参阅LICENSE文件。

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

推荐PyPI第三方库


热门话题
java Google应用程序引擎Jsf2 welcomefilelist不工作   Java学校练习   jar如何在java应用程序中完成http请求流   java在将列表数据放入映射时遇到异常   java安卓studio谷歌前置条件   在Eclipse中使用gradle运行java项目   java CXF返回元素列表   java直线与垂线相交的精度   java将图像从磁盘加载到JSP页面   多线程在Java多线程进程中更新布尔值   java SDK目录“C:\Users\User\AppData\Local\Android\SDK”不存在   单击“确定”按钮时,java GUI登录系统不会做出反应   雅加达。网ConnectException:添加weblogicapplication后。xml   在两个用户定义的点之间进行java二进制搜索,返回输入的两个点之间的所有名称   需要Java IntelliJ帮助才能不读取我的文件吗   java在序列化过程中动态忽略JSON属性仅在某些情况下,对于其他api端点,不应进行过滤   java SpringBoot REST API MockMVC测试未成功创建用户,尽管在React项目中使用了相同的功能   调试java。jvisulavm中添加JMXConnection时的lang.SecurityException   基于java的web边缘检测浏览器