皇甫天晴 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 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 基于52单片机的酒精浓度检测系统加继电器和sim800
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答