鱼C论坛

 找回密码
 立即注册
查看: 6967|回复: 65

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

[复制链接]
发表于 2018-3-27 15:49:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-3-28 19:32 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
这次还是一道简单的题目。
建立一个函数newlist(n),参数n为0或正整数,返回一个列表。
  1. 当n = 0
  2. 返回
  3. []

  4. 当n = 1
  5. 返回
  6. [[1]]

  7. 当n = 2
  8. 返回
  9. [[1],
  10. [2]]

  11. 当n = 3
  12. 返回
  13. [[1],
  14. [2, 3]]

  15. 当n = 4
  16. 返回
  17. [[1],
  18. [2, 3],
  19. [4]]
  20. ......

  21. 当n = 12
  22. 返回
  23. [[1],
  24. [2, 3],
  25. [4, 5, 6],
  26. [7, 8, 9, 10],
  27. [11, 12]]
复制代码

即n = 0返回空列表,n >= 1 返回二维列表,子列表的最大长度分别为1,2,3,4......

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-3-27 16:46:10 | 显示全部楼层
本帖最后由 graceasyi 于 2018-3-28 09:31 编辑

抢个沙发~

  1. def newlist(n):
  2.     if n:
  3.         lbd = lambda x: sum(range(1, x+1))
  4.         r = [i for i in range(1, n+1) if lbd(i-1) < n]     
  5.         t = [i for i in range(1, n+1)]
  6.         return [t[(i*i-i)//2:(i*i-i)//2 + i] for i in r]
  7.     else:
  8.         return []

  9. for n in range(20):
  10.     print(newlist(n))
复制代码


结果:
[]
[[1]]
[[1], [2]]
[[1], [2, 3]]
[[1], [2, 3], [4]]
[[1], [2, 3], [4, 5]]
[[1], [2, 3], [4, 5, 6]]
[[1], [2, 3], [4, 5, 6], [7]]
[[1], [2, 3], [4, 5, 6], [7, 8]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15], [16]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18]]
[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19]]

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 16:51:34 | 显示全部楼层
答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-27 17:49:52 | 显示全部楼层
  1. def newlist(n):
  2.     flag = 1
  3.     num = 1
  4.     my_list = []
  5.     while n>num:
  6.         if num+flag<=n+1:
  7.             list0 = [i for i in range(num,num+flag)]
  8.         else:
  9.             list0 = [i for i in range(num,n+1)]
  10.         my_list.append(list0)
  11.         flag += 1
  12.         num = list0[-1]+1
  13.         
  14.     return my_list
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 17:54:19 | 显示全部楼层
def newlist(n):
    num = 1
    s = -1
    list1 = []
    f = True
    for i in range(1,n + 1):
        if num > s:
            list1.append([i])
            num = 0
            num += 1
            s += 1
        else:
            list1[s].append(i)
            num += 1
    for i in list1:
        if i == list1[0]:
            print('['+str(i)+',')
        elif i == list1[-1]:
            print(str(i)+']')
        else:
            print(str(i)+',')
newlist(12)

点评

n为0和1时不对  发表于 2018-3-28 19:38

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 17:59:04 | 显示全部楼层
def newlist(n):
    num = 1
    s = -1
    list1 = []
    f = True
    for i in range(1,n+1):
        if num > s:
            list1.append([i])
            num = 0
            num +=1
            s +=1
        else:
            list1[s].append(i)
            num+=1
    for i in list1:
        if i == list1[0]:
            print('['+str(i)+',')
        elif i == list1[-1]:
            print(str(i)+']')
        else:
            print(str(i)+',')

点评

怎么跟上面的一样  发表于 2018-3-28 19:40
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-27 19:08:56 | 显示全部楼层
  1. def newlist(n):
  2.     a=list(range(1,n+1))
  3.     t=[]
  4.     i=0
  5.     while a!=[]:
  6.         if a[:i]!=[]:
  7.             t.append(a[:i])
  8.         a=a[i:]
  9.         i+=1  
  10.     return t
  11. print(newlist(0))
  12. print(newlist(1))
  13. print(newlist(3))
  14. print(newlist(4))
  15. print(newlist(12))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 19:11:15 From FishC Mobile | 显示全部楼层
  1. #!/usr/bin/python
  2. def f(n):
  3.         result = []
  4.         if n == 0:
  5.                 return result
  6.         elif n > 0:
  7.                 i = 1
  8.                 length = 1
  9.                 result.append([])
  10.                 while i < n + 1:
  11.                         if len(result[-1])<length:
  12.                                 result[-1].append(i)
  13.                                 i += 1
  14.                         else:
  15.                                 length += 1
  16.                                 result.append([])
  17.                 return result
  18.        
  19. print(f(0))
  20. print(f(1))
  21. print(f(2))
  22. print(f(3))
  23. print(f(4))
  24. print(f(12))
  25. print(f(18))
复制代码
  1. ##  输出结果:
  2. []
  3. [[1]]
  4. [[1], [2]]
  5. [[1], [2, 3]]
  6. [[1], [2, 3], [4]]
  7. [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12]]
  8. [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18]]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 19:43:55 | 显示全部楼层
  1. def newlist(n):
  2.     lis = []
  3.     if n < 0:
  4.         return 'Error'
  5.     elif n == 0:
  6.         return lis
  7.     else:
  8.         lis1 = [i for i in range(1, n + 1)]
  9.         k = 1
  10.         while len(lis1) > k:
  11.             lis2 = lis1[:k]
  12.             lis1 = lis1[k:]
  13.             k += 1
  14.             lis.append(lis2)
  15.         if len(lis1) != 0:
  16.             lis.append(lis1)
  17.         return lis
  18. n = int(input('请输入自然数:\n'))
  19. result = newlist(n)
  20. print(result)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 19:44:50 | 显示全部楼层
def newlist(n):
    if n == 0:
        s = []
        print(s)
        return []
    else:
        new = []
        for i in range(1,n+1):
            new.append(i)
        #return(new)
        l =len(new)
        s = []
        for i in range(1,n+1):
            #y = []
            a = int((i-1)*i/2)
            b = int(i*(i+1)/2)
            if a <=l:
                y = new[a:b]
                s.append(y)
            else:
                break
        print(s)
        return s


不知道怎么在列表中加入换行符,学习

点评

n为3,6,10等时,最后有个空的子列表  发表于 2018-3-28 19:44

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 20:42:57 | 显示全部楼层
本帖最后由 坑得飞起 于 2018-3-27 20:48 编辑

n=int(input())
i,j,s1,s2=1,1,[],[]
while (i<=n)and(n>0) :
    if i==int(0.5*j*j+0.5*j) :
        s2.append(i)
        s1.append(s2)
        s2,j=[],j+1
    else :
        s2.append(i)
    i+=1
if s2!=[] :
    s1.append(s2)
print(s1)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 要求创建函数

查看全部评分

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

使用道具 举报

发表于 2018-3-27 20:51:02 | 显示全部楼层
  1. def newlist(n):
  2.     if n == 0:
  3.         return []
  4.     else:
  5.         new_list = []
  6.         line_list = []
  7.         lines = 1
  8.         for i in range(1,n+1):
  9.             line_list.append(i)
  10.             if i == n:
  11.                 new_list.append(line_list)
  12.             else:
  13.                 if len(line_list) == lines:
  14.                     new_list.append(line_list)
  15.                     line_list = []
  16.                     lines += 1      
  17.         return new_list
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 21:02:56 | 显示全部楼层
  1. def newlist(num):
  2.     stringlist = []
  3.     for i in range(num, 0, -1):
  4.         stringlist.append(i)

  5.     i = 1
  6.     listnew = []

  7.     while len(stringlist) > 0:
  8.         tmpstring = []
  9.         for x in range(0, i):
  10.             if len(stringlist) > 0:
  11.                 tmpstring.append(stringlist.pop())
  12.         i += 1
  13.         listnew.append(tmpstring)

  14.     return listnew


  15. print(newlist(23))
复制代码

360截图20180327210238863.jpg

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 21:41:11 | 显示全部楼层
def newliest(n):
    if n == 0:
        return []
    elif n == 1:
        return [[1]]
    elif n == 2:
        return [[1],[2]]
    else:
        l = [x for x in range(1,n+1)]
        new_l = []
        s = 0
        for i in range(1,n):
            if s<len(l):
                new_l.append(l[s:s+i])
                s += i
        return new_l

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 21:41:48 | 显示全部楼层
rsm 发表于 2018-3-27 21:41
def newliest(n):
    if n == 0:
        return []

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

使用道具 举报

发表于 2018-3-27 21:52:11 | 显示全部楼层
  1. def newlist(n):
  2.     if n < 0:
  3.         print '参数错误!函数仅支持非负数参数!'
  4.         return
  5.     elif n == 0:
  6.         return []
  7.     else:
  8.         numlist_2d = []
  9.         start = 1
  10.         length = 1
  11.         temp = n
  12.         while temp > 0:
  13.             numlist_2d.append([j for j in range(start, start + length)])
  14.             start = start + length
  15.             length += 1
  16.             temp -= length

  17.         else:
  18.             if n > numlist_2d[-1][-1]:
  19.                 numlist_2d.append([k for k in range(numlist_2d[-1][-1] + 1, n+1)])
  20.             return  numlist_2d


  21. print newlist(19)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 22:03:07 | 显示全部楼层
本帖最后由 yunying12321 于 2018-3-27 22:04 编辑
  1. def newlist(n):
  2.     lst = []
  3.     m = []
  4.     x = count = 1
  5.     if n > 0:
  6.         while True:
  7.             for ss in range(count):
  8.                 m.append(x)
  9.                 x += 1
  10.                 if x > n:
  11.                     break
  12.             
  13.             lst.append(m)         
  14.             m = []
  15.             count += 1
  16.             if x > n:
  17.                 break        

  18.     return lst

  19. if __name__ == '__main__':
  20.     while True:
  21.         n = int(input('输入整数:'))
  22.         print(newlist(n))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 22:16:36 | 显示全部楼层
def array_0(n):
    list1=[]
    w=1
    while n:
        if (1+w)*w/2 < n:
            list1.append([0]*w)
            w = w + 1
        else:
            list1.append([0]* int(n-(w-1)*w/2))
            break
    return list1

def newlist(n):
    if n == 0:
        list2=[]
    else:
        list2=array_0(n)
        m=1
        for i in range(n):
            for j in range(i+1):
                if m<=n:
                    list2[i][j] = m
                    m=m+1
    print(list2)
newlist(16)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 23:10:46 | 显示全部楼层
  1. def newlist(n):
  2.     res = []
  3.     if n == 0:
  4.         return res
  5.     else:
  6.         num = 1
  7.         row = 1
  8.         while row * (row + 1) / 2 < n:
  9.             row += 1
  10.         for i in range(1, row + 1):
  11.             s = []
  12.             for each in range(i):
  13.                 if num <= n:
  14.                     s.append(num)
  15.                     num += 1
  16.             res.append(s)
  17.         return res

  18. n = int(input())
  19. print(newlist(n))
  20.             
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-27 23:34:04 | 显示全部楼层
def newlist(n):
    if n==0:
        return []
    elif n==1:
        return [[1]]
    else:
        k=[]
        i=1
        lis = list(range(1,n+1))
        while  len(lis) !=0:
            print('i',i)
            m = lis[:i]
            print(m)
            print(lis)
            k.append(m)
            lis =lis[i:]
            i+=1
        return  k

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 22:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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