学习笔记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)]