列表循环中每个项目的范围列表

时间:2019-01-02 15:04:57

标签: python function loops range

我正在尝试从平面数字列表中创建范围列表。 当它通过简单范围循环但在尝试循环自定义列表时会起作用,它给出了空的子列表。我刚刚开始我的python冒险,请不要残酷;)任何帮助将不胜感激。

预期的输出来自列表[0, 1, 2]-> [[0], [0, 1], [0, 1, 2]]

a = [1,2]
b = []

def makerange(n):
    b.append(list(range(0, n, 1)))

for a in range(10):
    makerange(a)

print(b)

[[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7, 8]]

3 个答案:

答案 0 :(得分:3)

不要使这个复杂化:

>>> a = [0,1,2]
>>> [list(range(n+1)) for n in a]
[[0], [0, 1], [0, 1, 2]]

range端点上加1以包含最终值。

答案 1 :(得分:0)

将集合列表保留在函数中并从函数返回它是更安全的:

def multiranges(data):
    rv = []
    for p in data:
        rv.append(list(range(p+1)))
    return rv

print(multiranges([0,1,2]))

输出:

[[0],[0,1],[0,1,2]]

答案 2 :(得分:0)

如果您的列表不是整数,请使用切片:

  • 情况1:

带有字符串

l = [*'ABCDEF']
[l[:n+1] for n in range(len(l))]

输出:

[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
  • 情况2:

并且l = [0,1,2]

l = [0,1,2]
[l[:n+1] for n in range(len(l))]

输出:

[[0], [0, 1], [0, 1, 2]]
  • 案例3

或整数列表按非升序排列:

l = [2,1,0]
[l[:n+1] for n in range(len(l))]

输出:

[[2], [2, 1], [2, 1, 0]]