鱼C论坛

 找回密码
 立即注册
查看: 2412|回复: 11

[已解决]老师布置的新作用,关于python列表; 求大位指导

[复制链接]
发表于 2022-7-11 13:09:34 | 显示全部楼层 |阅读模式

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

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

x
求各路大侠指导指导。。。

给出两个列表 ;列表的总和为 10的倍数 如

list1 = [0,0,0,5,5,6,5,4,5]

list2 = [13,5,5,0,2,5,0,0,0]


要求: 把这两个列表分别拆成多个列表且列表的总和为10, 不能改变元素的位置 ;
如:list1 拆成:
    [0,0,0,5,5,0,0,0,0] ,  [0,0,0,0,0,6,4,0,0] , [0,0,0,0,0,0,1,4,5]  


    list2 拆成:
    [10,0,0,0,0,0,0,0,0] , [3,5,2,0,0,0,0,0,0],  [0,0,3,0,2,5,0,0,0]

请用代码实现:
最佳答案
2022-7-12 00:15:15
  1. def get_res(data):
  2.     if sum(data) % 10:
  3.         return

  4.     print(data)
  5.     while sum(data) != 0:
  6.         temp = [0] * len(data)
  7.         for i in range(len(data)):
  8.             if sum(temp) + data[i] >= 10:
  9.                 temp[i] = 10 - sum(temp)
  10.                 data[i] -= temp[i]
  11.                 break
  12.             else:
  13.                 temp[i] = data[i]
  14.                 data[i] = 0
  15.         print('-->', temp)
  16.         
  17. if __name__ == '__main__':
  18.     get_res([0,0,0,5,5,6,5,4,5])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-11 13:25:50 From FishC Mobile | 显示全部楼层
样例 [0,...,1,4,5] 中的 1 是何来历,请问?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 13:33:27 | 显示全部楼层
jackz007 发表于 2022-7-11 13:25
样例 [0,...,1,4,5] 中的 1 是何来历,请问?


原列表 是 [0,0,0,5,5,6,5,4,5]

第一次拆成 [0,0,0,5,5,0,0,0,0] 那么原列表  就成了 [0,0,0,0,0,6,5,4,5]  

第二次拆 就拿   [0,0,0,0,0,6,5,4,5]   来拆, 拆成   [0,0,0,0,0,6,4,0,0]  ;拆后原列表就成了[0,0,0,0,0,0,1,4,5]

[0,0,0,0,0,0,1,4,5]     刚好是 10;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:30:37 | 显示全部楼层
makliu 发表于 2022-7-11 13:33
原列表 是 [0,0,0,5,5,6,5,4,5]

第一次拆成 [0,0,0,5,5,0,0,0,0] 那么原列表  就成了 [0,0,0,0,0,6, ...

不是很明白,你的 1 是无端端出现的吗?所以 1 是从哪里来?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:37:12 | 显示全部楼层
makliu 发表于 2022-7-11 13:33
原列表 是 [0,0,0,5,5,6,5,4,5]

第一次拆成 [0,0,0,5,5,0,0,0,0] 那么原列表  就成了 [0,0,0,0,0,6, ...

意思就是元素里面的值是可以做更改吗?只是位置不能更改对吗?
1 = 5 - 4?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:39:33 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 14:37
意思就是元素里面的值是可以做更改吗?只是位置不能更改对吗?
1 = 5 - 4?

嗯  嗯 是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:43:24 | 显示全部楼层

这是题目要求的吗?感觉无解(因为在逻辑上,答案无限多个啊)
[0,0,0,5,5,0,0,0,0] ,  [0,0,0,0,0,6,4,0,0] , [0,0,0,0,0,0,1,4,5]  
[0,0,0,4,0,6,0,0,0] ,  [0,0,0,0,4,6,0,0,0] , [0,0,0,1,5,0,4,0,0]....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 15:00:14 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 14:43
这是题目要求的吗?感觉无解(因为在逻辑上,答案无限多个啊)
[0,0,0,5,5,0,0,0,0] ,  [0,0,0,0,0,6,4, ...

  1. yyy =   [0,0,0,5,5,6,5,4,5]
  2. def split_list(x:list, s: int):

  3.     i = 0
  4.     r = 0
  5.     newList = []
  6.     while i < len(x):
  7.    
  8.         if x[i] == 0:
  9.             newList.append(x[i])
  10.             i += 1
  11.             continue
  12.         
  13.         if x[i] == s:
  14.             newList.append(x[i])
  15.             newList = newList + [ 0 for i in range(len(x) - len(newList))]
  16.             break
  17.       
  18.         if x[i] > s:
  19.             newList.append(10)
  20.             newList = newList + [0 for i in range(len(x) - len(newList))]
  21.             break
  22.      
  23.         if x[i] < s:
  24.             r = x[i] + r
  25.             
  26.             if r <= s:
  27.                 newList.append(x[i])
  28.                 i += 1
  29.             
  30.             if r > s:
  31.                
  32.                 newList.append(10-(r-x[i]))
  33.                 newList = newList + [0 for i in range(len(x) - len(newList))]
  34.                 break
  35.     return newList

  36. r = None

  37. r = yyy
  38. reslut = []
  39. while sum(r) != 10:
  40.     n_list = split_list(r, 10)
  41.     reslut.append(n_list)
  42.     r = [ r[i]-n_list[i] for i in range(len(r))]
  43.     if sum(r) == 10:
  44.         reslut.append(r)
  45. print(reslut)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 15:00:48 | 显示全部楼层

我好像给整出来~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 15:08:05 | 显示全部楼层
makliu 发表于 2022-7-11 15:00
我好像给整出来~

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-12 00:15:15 | 显示全部楼层    本楼为最佳答案   
  1. def get_res(data):
  2.     if sum(data) % 10:
  3.         return

  4.     print(data)
  5.     while sum(data) != 0:
  6.         temp = [0] * len(data)
  7.         for i in range(len(data)):
  8.             if sum(temp) + data[i] >= 10:
  9.                 temp[i] = 10 - sum(temp)
  10.                 data[i] -= temp[i]
  11.                 break
  12.             else:
  13.                 temp[i] = data[i]
  14.                 data[i] = 0
  15.         print('-->', temp)
  16.         
  17. if __name__ == '__main__':
  18.     get_res([0,0,0,5,5,6,5,4,5])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-12 14:00:15 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-28 11:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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