python 一个数列[n1, n2, n3.........],其中n个数的全排列个数

def free_combination(list1, m):
# 递归函数
global sum, list2 # 全局变量
if m == 1: # 递归出口
for i, element in enumerate(list1):
# enumerate()函数:返回下标(索引)和值
if i in list2:
# 因为已经加入组合的数字不能重复加入,所以跳出循环
continue
list2.append(i) # 未使用的数字可以加入组合
if n == len(list2): # 如果组合的长度符合要求,则符合规则的组合数量+1
sum += 1
for j in list2: # 打印
print(list1[j], end='\t')
list2.pop() # 删除最后一个元素。 (pop()返回删除的值,我们这里用不到)
print() # 换行
return 0
else:
for i, element in enumerate(list1):
if i in list2:
# 因为已经加入组合的数字不能重复加入,所以跳出循环
continue
list2.append(i) # 未使用的数字可以加入组合
free_combination(list1, m - 1) # 递归调用
list2.pop() # 删除最后一个元素。 (pop()返回删除的值,我们这里用不到)


list1 = eval(input('请输入自由组合的序列(形如[1, 2, 3,...]):'))
n = int(input('请输入自由组合的长度:'))
m = n
sum = 0
list2 = list() # 建立一个空列表,存储已经加入组合的下标值
free_combination(list1, m)
print(f'{list1}{n}个数的排列共有{sum}种排列组合')

转载于:https://www.cnblogs.com/JiankangLiu/p/10504726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值