皇甫天晴 2022-08-11 10:49 采纳率: 33.3%
浏览 48
已结题

Python全排列(强行凑够十字(。

进行全排列,但是不用交换法。思路:依次从数列中提出数并附在承载列表最后

#2022.8.11 Tianking Wang

global perm # 容纳排列实体的列表,列表元素为列表
global perm1 # 单个排列实体组成的列表,列表元素为数
perm = []
perm1 = []

def perm2_build(n):
perm2 = []
for i in range(n):
perm2.append(i+1)
return perm2

def permutation(list1): # 依据list1的递归
print(f"list1={list1}")
global perm
global perm1
if list1:
for i in list1:
perm1.append(i)
print(f"perm1={perm1}")
list2 = list1
list2.remove(i)
print(f"list2={list2}")
permutation(list2)
else:
perm.append(perm1)
print(f"perm={perm}")
perm1 = []

perm2 = perm2_build(3) # !!!!开局输入目标列表长度
permutation(perm2)
print(f"perm={perm}")

list1=[1, 2, 3]
perm1=[1]
list2=[2, 3]
list1=[2, 3]
perm1=[1, 2]
list2=[3]
list1=[3]
perm1=[1, 2, 3]
list2=[]
list1=[]
perm=[[1, 2, 3]]
perm=[[1, 2, 3]]

(专业术语不通请见谅)每次递归就从列表中提出一个值,一直到所有的值都取完。递归是能递归,就是循环不起来。难道说每次递归中,list1和list2都是同一个变量而没有分层?
我的代码应该怎么改进才能实现正确的结果呢?请不吝赐教。
  • 写回答

1条回答 默认 最新

  • qfcy_ 2022-08-11 10:55
    关注

    list2 = list1这一行改为list2 = list1.copy()。因为如果不用copy()方法, 修改list2后, list1也会随着修改, 也就是list1list2指向同一个列表。
    copy()方法后, list1list2就指向不同的列表。
    如果有帮助, 点个「采纳」谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 创建了问题 8月11日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。