鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-3-28 23:17:41 | 显示全部楼层
fan1993423 发表于 2018-3-28 23:11
我当时就在想怎么打印换行,我就一直在想\n用循环加进去,后来我发现做不来,就放弃了

列表都生成的了,肯定可以做打印啊,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 23:34:35 | 显示全部楼层
坑得飞起 发表于 2018-3-27 20:42
n=int(input())
i,j,s1,s2=1,1,[],[]
while (i0) :

def newlist(n):
    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)
    return s1

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

使用道具 举报

发表于 2018-3-29 00:02:22 | 显示全部楼层
看完大家的答案发现我理解错意思了。。。还以为输出的中间有换行=。=
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 09:19:01 | 显示全部楼层

C:\Users\Administrator\Desktop\1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 10:57:34 | 显示全部楼层
wyf345491656 发表于 2018-3-29 00:02
看完大家的答案发现我理解错意思了。。。还以为输出的中间有换行=。=

我觉得你是没理解二维数组的写法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 11:01:49 | 显示全部楼层
  1. def fun172(n):
  2.     if n == 0:
  3.         return [[]]
  4.     list_n = [i for i in range(1,n+1)]
  5.     result_list = []
  6.     length = 1
  7.     while length <= len(list_n):
  8.         result_list.append(list_n[:length])
  9.         list_n = list_n[length:]
  10.         length += 1
  11.     if list_n:
  12.         result_list.append(list_n)
  13.     return result_list

  14. if __name__ == '__main__':
  15.     n = input('输入数字:')
  16.     print(fun172(n))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 12:01:00 | 显示全部楼层
def newlist(n):
    new=[]
    x = 1
    for i in range(1,n+1):
        new.append(i)
    if new==[]:
        print(new)
    while new!=[]:
        print(new[:x])
        for i in new[:x]:
            new.remove(i)
        x+=1

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

使用道具 举报

发表于 2018-3-29 12:09:46 From FishC Mobile | 显示全部楼层
def main(n):
    mli,n=list(range(1,n+1)),0#生成列表以后n的值就不是原来的n了,懒得换变量了
    while mli[n:]:#每次迭代都会缩短原来的列表,只要判断n之后没有数据,就可以返回了
        mli=mli[:n]+[mli[n:2*n+1]]+mli[n*2+1:]#公式分头尾和中间,中间按照题意,把n个数合成列表,每次修改第n个数,第一个有一个数,第二个有二个数,所以是2*n+1。头为保留前n-1个数不变,尾第n个数修改以后,中间的数不再保留
        n+=1
    return mli

for i in range(12):
    print(i,main(i))

这道题我喜欢,目测代码应该是最短的了,早上刚看到,虽然超过时间了,也给点奖励吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 13:02:11 | 显示全部楼层
def newlist(n):
    if n :
        
        list1=[]
        
        i=1
        s=1
        while s <= n:
            
            a=list(range(i,s))
            list1.append(a)
            i += len(a)
            s = i + len(a) + 1

        list1.append(list(range(i,n+1)))
        del list1[0]
        
        print(list1)

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

使用道具 举报

发表于 2018-3-29 13:13:11 | 显示全部楼层
本帖最后由 榴莲酱奶昔 于 2018-3-29 13:16 编辑

def newlist(n):
    result=[]
    temp=[]
    count=1
    for i in range(1,n+1):
        temp.append(i)
        if len(temp)<count:
            continue
        else:
            result.append(temp[:])
            temp=[]
            count+=1
if len(temp):
    result.append(temp)
    return result
else:
    return result
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 21:14:04 | 显示全部楼层
import math
def increment(n):

    #print(int((1 + math.sqrt(1 + 4 * n)) / 2) + 1,(1 + math.sqrt(1 + 4 * n)))
    #if int((1 + math.sqrt(1 + 4 * n)) / 2) != ((1 + math.sqrt(1 + 4*n))/2):
    #    k = int((1 + math.sqrt(1 + 4*n))/2) + 1

    #else:
    #    k = ((1 + math.sqrt(1 + 4*n))/2)
    #print(k)
    k = int((1 + math.sqrt(1 + 4 * n)) / 2) + 1
    print(k)
    lst = [i for i in range(1,n+1)]
    print(lst)
    result = []
    for i in range(1,int(k)+1):
        k1 = int(i * (i - 1) / 2)
        k2 = int(i * (i + 1) / 2)
        print(k1,k2)
        print(lst[k1:k2])
        result.append(lst[k1:k2])
    print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 16:10:01 | 显示全部楼层
def newlist(n):
    l = [i for i in range(n + 1)]
    list_n = []
    list_t = []
    for each in l:
        length = len(list_t)
        if length > 0:
            max_num = 0
            for i in range(1, length + 2):
                max_num += 1
            if len(list_n) < max_num:
                list_n.append(each)
                if each == l[-1]:
                    list_t.append(list_n)
            else:
                list_t.append(list_n)
                list_n = [each]
                if each == l[-1]:
                    list_t.append(list_n)
        else:
            if each > 0:
                list_n = [1]
                list_t.append(list_n)
                list_n = []
            else:
                list_t = []
    return list_t


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

使用道具 举报

发表于 2018-4-1 13:49:16 | 显示全部楼层
def newlist(n):
    a=[]
    k=1
    for i in range(1,n+1):
        b=[j for j in range(k,k+i) if j<=n]
        a.append(b)
        if n<k:
            break
        k=k+i
        if n<k:
            break
    return a
print(newlist(14))
print(newlist(15))
print(newlist(16))
print(newlist(17))
print(newlist(18))
print(newlist(19))
print(newlist(20))
print(newlist(21))
print(newlist(22))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 16:19:24 | 显示全部楼层
import math


def newlist(n):
    new_list = []
    if n == 0:
        return new_list
    layer = int(math.ceil(math.sqrt(2*n) - 0.5))
    n_list = [i for i in range(1, n+1)]
    for i in range(1, layer+1):
        if n >= sum(range(i+1)):
            new_list.append(n_list[sum(range(i+1))-i: sum(range(i+1))])
        else:
            new_list.append(n_list[sum(range(i+1)) - i: n])
    return new_list


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

使用道具 举报

发表于 2018-4-2 15:13:42 | 显示全部楼层
  1. def dimension(number):
  2.     lista = [i for i in range(1, number + 1)]
  3.     flag = 0
  4.     while number > flag:
  5.         number -= flag
  6.         flag += 1
  7.     xflag = 1
  8.     x = 0
  9.     while flag > 0:
  10.         y = x + xflag
  11.         print(lista[x: y])
  12.         flag -= 1
  13.         xflag += 1
  14.         x = y
  15.     return


  16. number = int(input())
  17. while number > 0:
  18.     dimension(number)
  19.     number = int(input())

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

使用道具 举报

发表于 2018-4-2 18:29:36 | 显示全部楼层
新手挑战一下每日一题,只想到了这种思路

  1. def x1(n):
  2.     if n:
  3.         listn = list(range(1,n+1))
  4.         i = 0
  5.         while not i>=n:
  6.             l = listn[i:i+10]
  7.             j = 0
  8.             for k in range(1,5):
  9.                 yield l[j:j+k]
  10.                 j+=k
  11.             i += 10
  12.     else:
  13.         return []
  14. def newlist(n):
  15.     return list(filter(lambda i:i,x1(n)))


  16.             
  17. print(newlist(10))
  18. print(newlist(0))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-6 21:04:11 | 显示全部楼层
  1. def newlist(n):
  2.     if n == 0:
  3.         return []
  4.     ls = []
  5.     if n >= 1:
  6.         count = 1
  7.         lst = []
  8.         for i in range(1,n+1):
  9.             lst.append(i)
  10.             if count == len(lst):
  11.                 count += 1
  12.                 ls.append(lst)
  13.                 lst = []
  14.         else:
  15.             ls.append(lst)
  16.     return ls
  17.             

  18. print(newlist(12))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-22 09:42:36 | 显示全部楼层
def newlist(n):
    if n == 0:
        return new_list
    elif n < 0 :
        print('Wrong!')
    else:
        list1 = [x for x in range(1, n+1)]
        num = 0
        for i in list1:
            new_list.append(list1[num:num+i])
            num = num + i
            if list1[-1] == new_list[-1][-1]:
                break
    return new_list
new_list = []
n = int(input('n='))
print(newlist(n))

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

使用道具 举报

发表于 2018-10-3 17:43:37 | 显示全部楼层
  1. def fun_172(n):
  2.     def x(i):
  3.         return int(i*(i+1)/2)
  4.     list1=[i for i in range(1,n+1)]
  5.     list2,i=[],1
  6.     while x(i)<n:
  7.         list2.append(list1[x(i-1):x(i)])
  8.         i+=1
  9.     list2.append(list1[x(i-1):])
  10.     return list2 if n>0 else []
  11. print(fun_172(10))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-7 10:11:32 | 显示全部楼层
本帖最后由 kinkon 于 2022-9-7 10:14 编辑
  1. def newlist(n):
  2.     res = list()
  3.     ans = list(range(1, n + 1))
  4.     i = idx = k = 0
  5.     while idx <= n:
  6.         k += 1            
  7.         res.append([])
  8.         res[-1].extend(ans[idx:idx + k])
  9.         i += 1
  10.         idx += i
  11.     while res and not res[-1]:res.pop()
  12.     return res

  13. for i in range(21):
  14.     print(newlist(i))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 22:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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