鱼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 | 显示全部楼层
def fun172(n):
    if n == 0:
        return [[]]
    list_n = [i for i in range(1,n+1)]
    result_list = []
    length = 1
    while length <= len(list_n):
        result_list.append(list_n[:length])
        list_n = list_n[length:]
        length += 1
    if list_n:
        result_list.append(list_n)
    return result_list

if __name__ == '__main__':
    n = input('输入数字:')
    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 | 显示全部楼层
def dimension(number):
    lista = [i for i in range(1, number + 1)]
    flag = 0
    while number > flag:
        number -= flag
        flag += 1
    xflag = 1
    x = 0
    while flag > 0:
        y = x + xflag
        print(lista[x: y])
        flag -= 1
        xflag += 1
        x = y
    return


number = int(input())
while number > 0:
    dimension(number)
    number = int(input())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-2 18:29:36 | 显示全部楼层
新手挑战一下每日一题,只想到了这种思路
def x1(n):
    if n:
        listn = list(range(1,n+1))
        i = 0
        while not i>=n:
            l = listn[i:i+10]
            j = 0
            for k in range(1,5):
                yield l[j:j+k]
                j+=k
            i += 10
    else:
        return []
def newlist(n):
    return list(filter(lambda i:i,x1(n)))


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

使用道具 举报

发表于 2018-5-6 21:04:11 | 显示全部楼层
def newlist(n):
    if n == 0:
        return []
    ls = []
    if n >= 1:
        count = 1
        lst = []
        for i in range(1,n+1):
            lst.append(i)
            if count == len(lst):
                count += 1
                ls.append(lst)
                lst = []
        else:
            ls.append(lst)
    return ls
            

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 | 显示全部楼层
def fun_172(n):
    def x(i):
        return int(i*(i+1)/2)
    list1=[i for i in range(1,n+1)]
    list2,i=[],1
    while x(i)<n:
        list2.append(list1[x(i-1):x(i)])
        i+=1
    list2.append(list1[x(i-1):])
    return list2 if n>0 else []
print(fun_172(10))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 16:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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