我正在尝试从平面数字列表中创建范围列表。 当它通过简单范围循环但在尝试循环自定义列表时会起作用,它给出了空的子列表。我刚刚开始我的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]]
答案 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)
如果您的列表不是整数,请使用切片:
带有字符串
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']]
并且l = [0,1,2]
l = [0,1,2]
[l[:n+1] for n in range(len(l))]
输出:
[[0], [0, 1], [0, 1, 2]]
或整数列表按非升序排列:
l = [2,1,0]
[l[:n+1] for n in range(len(l))]
输出:
[[2], [2, 1], [2, 1, 0]]