学习笔记3 - python中的排列与组合
- 1. 排列
- (1). 使用product函数
- (2). 使用permutations函数
- 2. 组合
- (1). 使用combinations函数
- (2). 使用combinations_with_replacement函数
1. 排列
需求1:
将两个列表进行排列,有多少种结果?
(1). 使用product函数
接受多个可迭代对象
解决1:
from itertools import product
li = [1,2,3]
result = list(product(li, li))
print(result)
注意:这种方法可以为相同或不同的多个个列表
结果1:
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
延伸1:
接受一个可迭代对象和长度参数。
如果进行排列的是自身,则可以使用参数repeat,仅对自身
任意个列表进行排列:
from itertools import product
li = [1,2,3]
result = list(product(li, repeat=2))
print(result)
# 结果同上
注意:这里都为相同的多个列表
(2). 使用permutations函数
解决2:
输入一个可迭代参数,如:列表、元组等。每个元素会被当做整体来进行排列
from itertools import permutations
li = [1,2,3]
result = list(permutations(li))
print(result)
注意:这里可以省去长度参数,不是必须的。当省去时,为全排列。
结果2:
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
2. 组合
(1). 使用combinations函数
需求1:
将两个列表进行组合,有多少种结果?
补充1:
组合与排列不同,组合无序,所以无需将两个列表按照先后循序来进行排列,而是可以直接合并两个表,根据需要的结果长度来规定长度,进行组合。
解决1:
接受可迭代对象
from itertools import combinations
li1 = [1,2,3]
li2 = [2]
li_sum = li1 + li2
result = list(combinations(li_sum, 3))
print(result)
这里对一个总表进行组合即可,后面指定参数表示结果长度
注意1:该方法必须要有指定长度参数
结果1:
[(1, 2, 3), (1, 2, 2), (1, 3, 2), (2, 3, 2)]
(2). 使用combinations_with_replacement函数
同上,但是包含自身和自身元素的组合。即有重复元素。
from itertools import combinations_with_replacement
li = [1,2,3]
result = list(combinations_with_replacement(li, 2))
print(result)
注意2:该方法同样必须要有指定长度参数
结果2:
[(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]