两个数组分别全排列然后再配对

例:

[1,2]的全排列是:[1,2],[2,1]。

[3,4]的全排列是:[3,4],[4,3]。.

配对后是:[([1,2],[3,4]),([2,1],[4,3])]

有答案:

a=[1,3,4]
b=[3,9,12]
def permutations(s,nums,p,q):				#这个函数用来对nums进行全排列,放进s里
	if p==q:
		s.append(list(nums))
	else:
		for i in range(p,q):								#这个循环是关键
			nums[i],nums[p]=nums[p],nums[i]
			permutations(s,nums,p+1,q)				#p+1是易错点
			nums[i],nums[p]=nums[p],nums[i]		#这步也不能没有
if __name__=='__main__':
	all_a=[]
	permutations(all_a,a,0,len(a))
	all_b=[]
	permutations(all_b,b,0,len(b))
	z=list(zip(all_a,all_b))
	print(z)

不是很懂

配对的函数不用管,直接记就行list(zip(a,b))

关键是全排列的函数permutation(s,nums,p,q),也就是permutation(all_a,a,0,3)

1、p是怎样从初始值0变成3造成p==q然后增加列表到s里的?

2、这里面的for循环是怎样操作的。尤其是循环嵌套

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值