📜  Python中的置换和组合

📅  最后修改于: 2020-05-05 05:50:08             🧑  作者: Mango

Python提供直接方法来查找序列的排列和组合。这些方法位于itertools软件包中。

排列

首先导入itertools包以在Python中实现置换方法。此方法将列表作为输入,并返回一个元组的对象列表,该元组包含列表形式的所有排列

# 一个使用库函数打印所有排列的Python程序
from itertools import permutations
# 获取[1、2、3]的所有排列
perm = permutations([1, 2, 3])
# 打印获得的排列
for i in list(perm):
    print i

输出

(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)

它产生n!输入序列的长度为n时的排列。
如果要获取长度为L的排列,则以这种方式实现。

#一个Python程序,用于打印给定长度的所有排列
from itertools import permutations
# 获取长度为2的所有排列
perm = permutations([1, 2, 3], 2)
# 打印获得的排列
for i in list(perm):
    print i

输出

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)

它生成nCr * r!输入序列的长度为n并且输入参数为r时进行排列。

组合

此方法将一个列表和一个输入r作为输入,并返回一个元组的对象列表,该元组包含以列表形式包含长度r的所有可能组合。

# 一个Python程序,用于打印给定长度的所有组合
from itertools import combinations
# 获取[1、2、3]和长度2的所有组合
comb = combinations([1, 2, 3], 2)
# 打印获得的组合
for i in list(comb):
    print i

输出

(1, 2)
(1, 3)
(2, 3)

1,组合按输入的字典顺序排序。因此,如果输入列表已排序,则将按排序顺序生成组合元组。

# 一个Python程序,用于打印给定长度的所有组合以及未排序的输入。
from itertools import combinations
# 获取[2,1,3]和长度2的所有组合
comb = combinations([2, 1, 3], 2)
# 打印获得的组合
for i in list(comb):
    print i

输出

(2, 1)
(2, 3)
(1, 3)

2,元素根据其位置而不是其价值被视为唯一。因此,如果输入元素是唯一的,则每个组合中将没有重复值。

#一个Python程序,用于打印给定长度的所有组合以及输入中的重复项
from itertools import combinations
# 获取[1,1,3]和长度2的所有组合
comb = combinations([1, 1, 3], 2)
# 打印获得的组合
for i in list(comb):
    print i

输出:

(1, 1)
(1, 3)
(1, 3)

3,如果我们想将相同元素组合到相同元素,则使用combinations_with_replacement。

# 还包括一个Python程序,该程序可以打印所有具有元素对自身组合的组合
from itertools import combinations_with_replacement
# 获取[1、2、3]和长度2的所有组合
comb = combinations_with_replacement([1, 2, 3], 2)
# 打印获得的组合
for i in list(comb):
    print i

输出

(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3)