鱼C论坛

 找回密码
 立即注册
查看: 2076|回复: 5

[已解决]列表添加列表元素后,全部变为空,请大神指教

[复制链接]
发表于 2019-10-24 17:59:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
从五组数各取一个数组成一个从小到大的列表,并将所有可能组合找出来,代码如下:
  1. #从五组数各取一个数组成一个从小到大的列表,并将所有可能组合找出来

  2. #五组随机数
  3. listA = [4, 2, 7, 8, 3]
  4. listB = [1, 6, 2, 7, 5]
  5. listC = [7, 3, 1, 6, 0]
  6. listD = [5, 8, 9, 2, 1]
  7. listE = [6, 1, 4, 3, 9]

  8. listN = []#新列表
  9. listNs = []#新列表组合

  10. #遍历A,先添加后弹出
  11. for a in listA:
  12.     listN.append(a)
  13.     #遍历B,找出B中比a[0]大的数添加到bt
  14.     bt = []
  15.     for b in listB:
  16.         if b > a:
  17.             bt.append(b)
  18.     #遍历bt,先添加后弹出
  19.     for b in bt:
  20.         listN.append(b)
  21.         #遍历C,找出C中比bt[0]大的数添加到ct
  22.         ct = []
  23.         for c in listC:
  24.             if c > b:
  25.                 ct.append(c)               
  26.         #遍历ct,先添加后弹出
  27.         for c in ct:
  28.             listN.append(c)
  29.             #遍历D,找出比ct[0]大的数添加到dt
  30.             dt = []
  31.             for d in listD:
  32.                 if d > c:
  33.                     dt.append(d)
  34.             #遍历dt,先添加后弹出
  35.             for d in dt:
  36.                 listN.append(d)
  37.                 #遍历E,找出比dt[0]大的数添加到et
  38.                 et = []
  39.                 for e in listE:
  40.                     if e > d:
  41.                         et.append(e)
  42.                 #遍历et,先添加后弹出
  43.                 for e in et:                    
  44.                     #将et[0]添加到listN中
  45.                     listN.append(e)
  46.                     #打印listN
  47.                     print(listN)
  48.                     listNs.append(listN)
  49.                     #弹出listN[-1]                    
  50.                     listN.pop()
  51.                 listN.pop()
  52.             listN.pop()      
  53.         listN.pop()                              
  54.     listN.pop()
  55.    
  56. print(listNs)
复制代码


运行后显示所有列表元素为空,如下:
  1. [4, 6, 7, 8, 9]
  2. [4, 5, 7, 8, 9]
  3. [4, 5, 6, 8, 9]
  4. [2, 6, 7, 8, 9]
  5. [2, 5, 7, 8, 9]
  6. [2, 5, 6, 8, 9]
  7. [3, 6, 7, 8, 9]
  8. [3, 5, 7, 8, 9]
  9. [3, 5, 6, 8, 9]
  10. [[], [], [], [], [], [], [], [], []]
复制代码


百思不得其解,请大神指教
最佳答案
2019-10-24 18:14:38
append列表,使用的是地址,你最后把列表pop干净了,里面相关的就都是空,可以使用切片或者深拷贝
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 18:14:34 | 显示全部楼层
都pop了怎么可能还会有。
listNs.append(listN[:]) # 在此添加副本吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-24 18:14:38 | 显示全部楼层    本楼为最佳答案   
append列表,使用的是地址,你最后把列表pop干净了,里面相关的就都是空,可以使用切片或者深拷贝
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-24 18:33:17 | 显示全部楼层
ba21 发表于 2019-10-24 18:14
都pop了怎么可能还会有。
listNs.append(listN[:]) # 在此添加副本吧

谢谢大神,成功了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-24 18:35:31 | 显示全部楼层
塔利班 发表于 2019-10-24 18:14
append列表,使用的是地址,你最后把列表pop干净了,里面相关的就都是空,可以使用切片或者深拷贝

谢谢大神,此处地址和C语言中的指针是否一回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-24 18:43:23 | 显示全部楼层
stone1005 发表于 2019-10-24 18:35
谢谢大神,此处地址和C语言中的指针是否一回事

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 02:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表