【问题标题】:python loop x + 1 times in a list of list until number ypython在列表列表中循环x + 1次,直到数字y
【发布时间】:2016-08-27 08:21:14
【问题描述】:

我想要的是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. 

抱歉不清楚

【问题讨论】:

  • 什么是 x 和 y 值?你能说得清楚一点吗?
  • x 是整数如何循环并附加到列表中
  • > 它附加项 [[1 times], [2 times], [3 times], ...[x + 1times]] y 是停止循环的整数
  • 你的问题是从列表中找出最大的数对吗?
  • 正如写的那样,这个问题没有任何意义。不清楚num 是什么……是输入吗?那么为什么不提供应该与该输入相关联的输出。如果不是输入,那么……输入是什么?

标签: python list loops random iterate


【解决方案1】:

两个 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]

输出:

>>> 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]]

【讨论】:

    【解决方案2】:
    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
    

    从一个 python 文件你可以从命令行运行它(比如文件名是 test.py)

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

    【讨论】:

      【解决方案3】:

      我不确定你的问题是什么。但我假设你已经做了类似的事情。

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

      而你正在寻找的是这个。

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

      这样做。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-27
        • 1970-01-01
        • 2019-07-06
        • 1970-01-01
        • 2020-05-10
        • 2021-12-15
        • 1970-01-01
        • 2016-02-25
        相关资源
        最近更新 更多