鱼C论坛

 找回密码
 立即注册
查看: 603|回复: 12

递归中的存储问题

[复制链接]
发表于 2018-12-10 21:28:39 | 显示全部楼层 |阅读模式

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

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

x
组合.png
我想将所有的select_data以列表的形式存储到all_data中,我该怎么做?求助各位大神!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-10 21:31:59 | 显示全部楼层
倒数第二行combine里多了个参数,请大家无视
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 22:28:13 | 显示全部楼层
你定义的combine函数设定的4个参数,而你调用的时候传递的是5个参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 22:57:54 | 显示全部楼层
fan1993423 发表于 2018-12-10 22:28
你定义的combine函数设定的4个参数,而你调用的时候传递的是5个参数

忘了删除了,请无视这个细节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 22:59:22 | 显示全部楼层
baibaitjy 发表于 2018-12-10 22:57
忘了删除了,请无视这个细节

你最终是想实现哪种列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 23:28:15 | 显示全部楼层
fan1993423 发表于 2018-12-10 22:59
你最终是想实现哪种列表

就是在all_data里面放入所有6个数字的组合情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 23:31:22 | 显示全部楼层
  1. data_tmp=[1,2,3,4,5,6,7,8,9,10]
  2. all_data=[]
  3. def combine(data,step,select_data,target_num):
  4.     global all_data
  5.     if len(select_data)==target_num:
  6.         print(select_data)
  7.         #all_data.append(select_data)
  8.         #print(all_data)
  9.         return
  10.     if step >= len(data):
  11.         return
  12.     select_data.append(data[step])
  13.     combine(data,step+1,select_data,target_num)
  14.     select_data.pop()
  15.     combine(data,step+1,select_data,target_num)
  16. if __name__ == '__main__':
  17.     data=data_tmp
  18.     combine(data,0,[],6)
  19.     #print(all_data)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 23:34:11 | 显示全部楼层
本帖最后由 baibaitjy 于 2018-12-10 23:36 编辑

结果.png
想把这些结果存进all_data里
@fan1993423
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 00:55:54 | 显示全部楼层
  1. data_tmp = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  2. all_data = []


  3. def combine(data, step, select_data, target_num):
  4.     if len(select_data) == target_num:
  5.         select_data = str(select_data)
  6.         all_data.append(select_data)
  7.         #print(select_data)
  8.         # all_data.append(select_data)
  9.         # print(all_data)
  10.         return
  11.     if step >= len(data):
  12.         return
  13.     select_data.append(data[step])
  14.     combine(data, step + 1, select_data, target_num)
  15.     select_data.pop()
  16.     combine(data, step + 1, select_data, target_num)


  17. if __name__ == '__main__':
  18.     data = data_tmp
  19.     combine(data, 0, [], 6)
  20.     print(all_data)
复制代码


我不是很清楚,为什么加到列表要转文本,不然加不不进去,转了之后可以添加进all_data列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-11 13:36:17 | 显示全部楼层
Stubborn 发表于 2018-12-11 00:55
我不是很清楚,为什么加到列表要转文本,不然加不不进去,转了之后可以添加进all_data列表

是哦,好奇怪啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-11 19:28:42 | 显示全部楼层
自顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-12 14:33:04 | 显示全部楼层
自顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-14 09:53:51 | 显示全部楼层
把 all_data.append(select_data) 改成:all_data.append(select_data[:])
深浅拷贝的问题。这里要用深拷贝~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 08:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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