鱼C论坛

 找回密码
 立即注册
查看: 2051|回复: 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
def get_res(data):
    if sum(data) % 10:
        return

    print(data)
    while sum(data) != 0:
        temp = [0] * len(data)
        for i in range(len(data)):
            if sum(temp) + data[i] >= 10:
                temp[i] = 10 - sum(temp)
                data[i] -= temp[i]
                break
            else:
                temp[i] = data[i]
                data[i] = 0
        print('-->', temp)
        
if __name__ == '__main__':
    get_res([0,0,0,5,5,6,5,4,5])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-11 13:25:50 From FishC Mobile | 显示全部楼层
样例 [0,...,1,4,5] 中的 1 是何来历,请问?
想知道小甲鱼最近在做啥?请访问 -> 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;
想知道小甲鱼最近在做啥?请访问 -> 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 是从哪里来?
想知道小甲鱼最近在做啥?请访问 -> 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?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯  嗯 是的
想知道小甲鱼最近在做啥?请访问 -> 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]....
想知道小甲鱼最近在做啥?请访问 -> 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, ...
yyy =   [0,0,0,5,5,6,5,4,5]
def split_list(x:list, s: int):

    i = 0
    r = 0
    newList = []
    while i < len(x):
    
        if x[i] == 0:
            newList.append(x[i])
            i += 1
            continue
        
        if x[i] == s:
            newList.append(x[i])
            newList = newList + [ 0 for i in range(len(x) - len(newList))]
            break
       
        if x[i] > s:
            newList.append(10)
            newList = newList + [0 for i in range(len(x) - len(newList))]
            break
     
        if x[i] < s:
            r = x[i] + r
            
            if r <= s:
                newList.append(x[i])
                i += 1
            
            if r > s:
               
                newList.append(10-(r-x[i]))
                newList = newList + [0 for i in range(len(x) - len(newList))]
                break
    return newList

r = None

r = yyy
reslut = []
while sum(r) != 10:
    n_list = split_list(r, 10)
    reslut.append(n_list)
    r = [ r[i]-n_list[i] for i in range(len(r))]
    if sum(r) == 10:
        reslut.append(r)
print(reslut)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我好像给整出来~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

    print(data)
    while sum(data) != 0:
        temp = [0] * len(data)
        for i in range(len(data)):
            if sum(temp) + data[i] >= 10:
                temp[i] = 10 - sum(temp)
                data[i] -= temp[i]
                break
            else:
                temp[i] = data[i]
                data[i] = 0
        print('-->', temp)
        
if __name__ == '__main__':
    get_res([0,0,0,5,5,6,5,4,5])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-12 14:00:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 10:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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