鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 172

[复制链接]
发表于 2018-3-28 09:09:30 | 显示全部楼层
  1. def newlist(n):
  2.         if n==0:
  3.                 return []       
  4.         elif n>=1:
  5.                 arr=list(range(0,n+1))
  6.                 brr=[]
  7.                 k=0       
  8.                 s=1       
  9.                 for i in range(1,n+1):                       
  10.                         e=n+1 if s+i>n+1 else s+i
  11.                         brr.append(arr[s:e])
  12.                         s=e
  13.                         if e==n+1:
  14.                                 break
  15.         return brr

  16. print(newlist(12))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 09:14:06 | 显示全部楼层
#n = 0返回空列表,n >= 1 返回二维列表,子列表的最大长度分别为1,2,3,4......
#题目中的代码32行是不是有问题?

  1. def newlist(n):
  2.         list_new = []
  3.         if n != 0:
  4.                 list1,list2,list3,list4 = [],[],[],[]
  5.                 for i in range(1,n+1):
  6.                         if i%10 == 1:
  7.                                 list1.append(i)
  8.                         elif 1 < i%10 < 4:
  9.                                 list2.append(i)
  10.                         elif 3 < i%10 < 7:
  11.                                 list3.append(i)
  12.                         elif 6 < i%10 < 11 or i%10 == 0:
  13.                                 list4.append(i)
  14.                         if len(list4) == 4 or i == n:
  15.                                 if list1 != []:
  16.                                         list_new.append(list1)
  17.                                 if list2 != []:
  18.                                         list_new.append(list2)
  19.                                 if list3 != []:
  20.                                         list_new.append(list3)
  21.                                 if list4 != []:
  22.                                         list_new.append(list4)
  23.                                 list1,list2,list3,list4 = [],[],[],[]
  24.                 return list_new

  25.         else:
  26.                 return list_new

  27. print(newlist(22))
复制代码

点评

n>11出错,出现[11]单独的子列表  发表于 2018-3-28 19:53

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-3-28 09:35:07 | 显示全部楼层
  1. #!/usr/bin/env python
  2. #coding=UTF-8

  3. def newlist(n):
  4.         if n == 0:
  5.                 return []
  6.         lenlist = 1
  7.         i = 0
  8.         listitem = 0
  9.         result = []
  10.         while listitem < n:
  11.                 min = listitem
  12.                 max = (listitem + lenlist) if (listitem + lenlist) <=n else n
  13.                 result.append([(i + 1) for i in range(min, max)])
  14.                 listitem =listitem + lenlist
  15.                 lenlist += 1
  16.         return result

  17. print(newlist(20))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 09:40:52 | 显示全部楼层
  1. def newlist(n):
  2.     res = []
  3.     if n == 0:
  4.         return res
  5.     row =  0
  6.     columns = 1
  7.     res.append([])
  8.     for i in [i for i in range(1, n+1)]:
  9.         if len(res[-1]) == columns:
  10.             res.append([])
  11.             row += 1
  12.             columns = row+1
  13.         res[row].append(i)
  14.     return res
  15. if __name__ == '__main__':
  16.     print(newlist(12))
复制代码

我想了1个多小时才明白如何做这道题。开始我觉得两个for循环能够搞定。后来发现掉坑里了。最终还是用二维数组的行列下标来处理。

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 09:50:40 | 显示全部楼层
  1. def newlist(n):   
  2.     gen = (x for x in range(1,n+1))
  3.     rs = []
  4.     num = 1
  5.     while True:
  6.         try:
  7.             temp = []
  8.             for i in range(num):
  9.                 temp.append(next(gen))
  10.             num+=1
  11.         except StopIteration:
  12.             break
  13.         finally:
  14.             if temp:
  15.                 rs.append(temp)
  16.     return rs

  17. if __name__ == '__main__':
  18.     for y in range(13):
  19.         print('newlist(%d) : %s' % (y,newlist(y)))
复制代码
  1. newlist(0) : []
  2. newlist(1) : [[1]]
  3. newlist(2) : [[1], [2]]
  4. newlist(3) : [[1], [2, 3]]
  5. newlist(4) : [[1], [2, 3], [4]]
  6. newlist(5) : [[1], [2, 3], [4, 5]]
  7. newlist(6) : [[1], [2, 3], [4, 5, 6]]
  8. newlist(7) : [[1], [2, 3], [4, 5, 6], [7]]
  9. newlist(8) : [[1], [2, 3], [4, 5, 6], [7, 8]]
  10. newlist(9) : [[1], [2, 3], [4, 5, 6], [7, 8, 9]]
  11. newlist(10) : [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
  12. newlist(11) : [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11]]
  13. newlist(12) : [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12]]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 10:51:49 | 显示全部楼层
def fun(n):
    resultlist = []
    sum = 0
    maxlen = 0
    lastlen = 0
    if n==0:
        return resultlist
    elif n == 1:
        list1 = [1]
        resultlist.append(list1)
        return resultlist

    else:
        for i in range(1,n+1):
            sum +=i
            if sum>n:
                maxlen = i-1
                lastlen = n-(sum-i)
                break
        sum2 = 1
        for i in range(1, maxlen + 1):

            list1 = []
            for j in range(sum2, n + 1):
                if len(list1) < i:
                    list1.append(j)
                else:
                    break
            resultlist.append(list1)
            sum2 = i + sum2
        lastone = []
        for i in range(n - lastlen + 1, n + 1):
            lastone.append(i)
        if lastone:
            resultlist.append(lastone)
        return resultlist

print(fun(12))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 10:52:58 | 显示全部楼层
  1. def newlist(n):
  2.     if n<0 :
  3.         print('请输入正确参数值')
  4.         return
  5.         
  6.     # 定义返回列表
  7.     retlist = []
  8.     # 生成1-n 的临时列表
  9.     temlist = []
  10.     for i in range(1,n+1):
  11.         temlist.append(i)

  12.     i = 0
  13.     c = 1

  14.     while  i < n:
  15.         if i+c > n: # 添加末尾不够4个的值
  16.             retlist.append(temlist[i:-1])
  17.         else:
  18.             retlist.append(temlist[i:i+c])

  19.         i += c

  20.         if c<4 :
  21.             c += 1
  22.         else:
  23.             c = 4

  24.     return retlist
复制代码

点评

n=3,6等最后多一个[]子列表  发表于 2018-3-28 19:57

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-3-28 11:38:25 | 显示全部楼层
  1. '''
  2. 建立一个函数newlist(n),参数n为0或正整数,返回一个列表。
  3. 当n = 0 返回[]
  4. 当n = 1 返回[[1]]
  5. 当n = 2 返回[[1], [2]]
  6. 当n = 3 返回[[1], [2, 3]]
  7. 当n = 4 返回[[1], [2, 3], [4]]
  8. ......
  9. 当n = 12返回[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12]]
  10. 即n = 0返回空列表,n >= 1 返回二维列表,子列表的最大长度分别为1,2,3,4......
  11. '''
  12. def newlist(n):
  13.     if n==0:
  14.         return []
  15.     else:
  16.         listx=[]
  17.         listy=[]
  18.         maxlen=1
  19.         for i in range(1,n+1):
  20.             listy.append(i)
  21.             if len(listy)>=maxlen:
  22.                 listx.append(listy)
  23.                 listy=[]
  24.                 maxlen=maxlen+1
  25.         if listy==[]:
  26.             return listx
  27.         else:
  28.             listx.append(listy)
  29.             return listx

  30. print(newlist(1))
  31. print(newlist(9))
  32. print(newlist(15))
  33.                
  34.             
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 12:51:37 | 显示全部楼层
  1. def newlst(n):
  2.     nlst, lst, i = list(), list(range(1,n+1)), 1
  3.     while lst != []:
  4.         nlst.append(lst[0:i])
  5.         lst = lst[i:]
  6.         i += 1
  7.     return nlst

  8. if __name__ == '__main__':
  9.     print(newlst(31))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 14:16:33 | 显示全部楼层
本帖最后由 checkily 于 2018-3-28 22:18 编辑
  1. def newlist(n):
  2.     result = []
  3.     for i in range(n):
  4.         start = 1+int(i*(i+1)/2)
  5.         end = 1+int((i+1)*(i+2)/2)
  6.         if n >= end:
  7.             result.append([i for i in range(start, end)])
  8.         else:
  9.             lresult.append([i for i in range(start, n+1)])
  10.             break

  11.     return result
复制代码

点评

lis是什么?  发表于 2018-3-28 19:59

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

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

使用道具 举报

发表于 2018-3-28 14:32:51 | 显示全部楼层
  1. def fun(n):
  2.     lst, temp, length = [], [], 1
  3.     for i in range(1, n + 1):
  4.         temp.append(i)
  5.         if len(temp) >= length:
  6.             lst.append(temp)
  7.             temp = []
  8.             length += 1
  9.     if temp: lst.append(temp)
  10.     return lst if n else []
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 17:39:33 | 显示全部楼层
哎没想出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 17:55:20 | 显示全部楼层
写出来总感觉怪怪的~~等着看其他大佬的答案
  1. def newlist(n):
  2.     newlist = []
  3.     sublist = []
  4.     k = 1
  5.     for i in range(1, 999):
  6.         if k <= n:
  7.             for j in range(0, i):
  8.                 if k <= n:
  9.                     sublist.append(k)
  10.                     k += 1
  11.                 else:
  12.                     break
  13.         else:
  14.             break
  15.         newlist.append(sublist)
  16.         sublist = []
  17.     return newlist

  18. for i in range(13):
  19.     print(newlist(i))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-28 21:48:22 | 显示全部楼层

这个也算啊,题目要求要换行。你都没换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 21:50:35 | 显示全部楼层
这个题目不是要求换行显示吗?我一直在想怎么换行解决。@冬雪雪冬 [[1],
[2, 3],
[4, 5, 6],
[7, 8, 9, 10],
[11, 12]]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 22:14:12 | 显示全部楼层
fan1993423 发表于 2018-3-28 21:50
这个题目不是要求换行显示吗?我一直在想怎么换行解决。@冬雪雪冬 [[1],
[2, 3],
[4, 5, 6],

认真了大兄弟,题目要求返回列表,你这是进行格式打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 22:20:07 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2018-3-28 22:20:09 | 显示全部楼层
fan1993423 发表于 2018-3-28 21:50
这个题目不是要求换行显示吗?我一直在想怎么换行解决。@冬雪雪冬 [[1],
[2, 3],
[4, 5, 6],

要求是返回一个二维列表,而python的打印print函数是没有自动换行功能的,我在题目中加上换行是为了表示清楚。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 23:11:55 | 显示全部楼层
塔利班 发表于 2018-3-28 22:14
认真了大兄弟,题目要求返回列表,你这是进行格式打印

我当时就在想怎么打印换行,我就一直在想\n用循环加进去,后来我发现做不来,就放弃了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 23:12:45 | 显示全部楼层
冬雪雪冬 发表于 2018-3-28 22:20
要求是返回一个二维列表,而python的打印print函数是没有自动换行功能的,我在题目中加上换行是为了表示 ...

哦。那这样这个题还是很简单的,我主要当时就在想\n怎么加才能打出你题目中的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 03:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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