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

Python 列表循环中每个项目的范围列表,python,function,loops,range,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)

我试图从一个简单的数字列表中创建一个范围列表。 它在通过简单范围循环时工作,但在尝试循环自定义列表时,它会给出空的子列表。我刚开始我的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]]

不要过分复杂化:

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

将1添加到
范围
端点以包括端点值。

不要将其过度复杂化:

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

将1添加到
范围
端点以包括端点值。

将收集列表保留在函数中并从函数返回更安全:

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]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 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]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 1, 0]]

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

  • 案例1:
用绳子

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

[[0],[0,1],[0,1,2]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 1, 0]]
  • 案例2:
l=[0,1,2]

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

[[0],[0,1],[0,1,2]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 1, 0]]
  • 案例3
或整数列表按非升序排列:

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

[[0],[0,1],[0,1,2]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 1, 0]]

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

  • 案例1:
用绳子

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

[[0],[0,1],[0,1,2]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 1, 0]]
  • 案例2:
l=[0,1,2]

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

[[0],[0,1],[0,1,2]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 1, 0]]
  • 案例3
或整数列表按非升序排列:

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

[[0],[0,1],[0,1,2]]
[['A'],
 ['A', 'B'],
 ['A', 'B', 'C'],
 ['A', 'B', 'C', 'D'],
 ['A', 'B', 'C', 'D', 'E'],
 ['A', 'B', 'C', 'D', 'E', 'F']]
[[0], [0, 1], [0, 1, 2]]
[[2], [2, 1], [2, 1, 0]]

如果您可以包含预期的输出,那就太好了。您将
a
定义为
[1,2]
,然后将其丢弃,并从
范围
使用
a
作为
0
9
。您希望它基于
[1,2]
还是
范围(10)
?无论哪种方式,您都需要避免重用变量名,因为这只会让您感到困惑;将循环变量更改为
i
(因此对于范围(10)中的i是
对于a:
中的i,那么
makerange(i)
就不会那么混乱了。无法复制:
[[]、[0]、[0,1]、[0,1,2]、[0,1,2]、[0,2,3,3,4,4]、[0,1,2,3,4,5]、[0,1,2,2,3,4,7,6],[0,1,2,3,4,5,6,7,8]
btw:
b.append(list(range(0,n,1))
=>
b.append(list(range(n)))
预期输出完成,结果现在正确了如果可以包含预期输出,那就太好了。您将
a
定义为
[1,2]
,然后扔掉它,从
范围使用
a
作为
0
9
。您希望它基于
[1,2]
还是
范围(10)
?无论哪种方式,您都需要避免重用变量名,因为这只会让您感到困惑;将循环变量更改为
i
(因此,
对于范围(10)中的i来说是
或者
对于a:
,那么
makerange(i)
就不会那么令人困惑了。无法复制:
[[]、[0]、[0,1]、[0,1]、[0,1]、[0,2,3]、[0,1,2,3,4,4]、[0,1,2,3,4,5,6,7]、[0,1,2,2,2,3,5,6]、[0,1,2,2,5,5,6]、[8]。(列表(范围(0,n,1)))
=>
b.append(列表(范围(n)))
预期输出完成,结果现在是正确的