进行置换;基于activestate配方190465
xpermutations的Python项目详细描述
简介
这个包是由xpermutations recipe 由Ulrich Hoffman提交给ActiveState。
文中提供的文件如下并假定 在Creative Commons Attribution 3.0许可下。
使用PIP或Easy_安装:
sudo pip install xpermutations
配方文件(Ulrich Hoffman)
算法中经常需要置换和组合。 对解空间进行了彻底的搜索。他们是 通常相当大,所以最好不要计算它们 完全但最好是懒散地生成它们。这个食谱 使用Python2.2生成器创建适当的生成器 对象,例如可以用作for循环中的范围。
这个配方提供了组合和排列,并且懒散地 生成它们。你可以对 排列/组合项不只是打印它们。
如果您需要排列的完整列表,只需使用 内置的list()运算符。请注意,结果列表可能很大。
这里定义的所有x-生成器都会产生包含 原始序列。它们的区别在于采用了哪些元素:
xpermutations()从序列中获取所有元素,顺序很重要。
xcombinations()从序列中提取n个不同的元素, 秩序很重要。
xuniquecombinations()从序列中提取n个不同的元素, 秩序无关紧要。
xselections()从 顺序,顺序很重要。
请注意,“distinct”的意思是“原始文件中的不同元素 “顺序”而不是“不同值”,即:
>>> list(xuniqueCombinations('aabb', 2)) [['a', 'a'], ['a', 'b'], ['a', 'b'], ['a', 'b'], ['a', 'b'], ['b', 'b']]
将后者与:
>>> all_different = list(set('aabb')) >>> list(xuniqueCombinations(all_different, 2)) [['a', 'b']]
如果序列中只有具有唯一值的项,则不会 注意区别(不是双关语)。
注意事项
集合理论家可能会对这个术语提出异议。
示例
xcombinations()
>>> " ".join("".join(x) for x in xcombinations("1234", 2)) '12 13 14 21 23 24 31 32 34 41 42 43'
xuniquecombinations()
>>> " ".join("".join(x) for x in xuniqueCombinations("1234", 2)) '12 13 14 23 24 34'
xselections()
>>> " ".join("".join(x) for x in xselections("1234", 2)) '11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44'
expermutations()
>>> " ".join("".join(x) for x in xpermutations("123")) '123 132 213 231 312 321'