简体   繁体   English

python在列表中循环x + 1次,直到编号y

[英]python loop x + 1 times in a list of list until number y

What I want is the list in num loops x + 1 everytime until y is generated(and loops is stoped), which is a large number. 我想要的是每次num循环x + 1的列表,直到生成y (并且循环停止)为止,这是一个很大的数目。

def loop_num(y):
    num = []
    num.append([1])
    num.append([2,3])
    num.append([4,5,6]) 
    num.append([7,8,9,10]) 
    ... #stop append when y in the appended list
    #if y = 9, then `append [7,8]` and `return num`
    return num


# something like[[1 item], [2items], [3items], ...]
# the number append to the list can be a random number or ascending integers. 

sorry for not clear 对不起,不清楚

Two itertools.count objects should do what you want: 两个itertools.count对象应该执行您想要的操作:

from itertools import count

def loop_num(y):
    counter, x = count(1), count(1)
    n = 0
    while n < y:
        num = []
        for i in range(next(x)):
            num.append(next(counter))
            if num[-1] == y:
                break
        yield num
        n = num[-1]

Output: 输出:

>>> list(loop_num(100))
[[1],
 [2, 3],
 [4, 5, 6],
 [7, 8, 9, 10],
 [11, 12, 13, 14, 15],
 [16, 17, 18, 19, 20, 21],
 [22, 23, 24, 25, 26, 27, 28],
 [29, 30, 31, 32, 33, 34, 35, 36],
 [37, 38, 39, 40, 41, 42, 43, 44, 45],
 [46, 47, 48, 49, 50, 51, 52, 53, 54, 55],
 [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66],
 [67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78],
 [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91],
 [92, 93, 94, 95, 96, 97, 98, 99, 100]]
def loop_num(x):
    i=1
    cnt=0
    sum=0
    while sum<x:

        sum+=i
        cnt=cnt+1
        i=i+1

    num=[ [] for x in range(cnt)]

    count=0

    sz=1
    init=1
    while(count<cnt):
        cur=1
        while(cur<=sz):
            num[count].append(init)
            init=init+1
            cur=cur+1
        count=count+1
        sz=sz+1;
    return num

From a python file you may run it from command line (say filename is test.py) 在python文件中,您可以从命令行运行它(例如,文件名是test.py)

python -c 'import test; print test.loop_num(55)'

I am not sure what is your question. 我不确定您的问题是什么。 But I am assuming that you have done something similar to this. 但是我假设您已经做了类似的事情。

x=[[1], [2,3], [4,5,6]]
b=[str(a)+' items' for a in [j for i in x for j in i]]

And what you are looking for is this. 而您正在寻找的是这个。

c=max([j for i in x for j in i])

to do this. 去做这个。

z=[]
z.append(str(c)+' items')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM