Список диапазонов для каждого элемента в цикле списка - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь создать список диапазонов из простого списка чисел. Он работает, когда он зацикливается на простом диапазоне, но при попытке зациклить пользовательский список дает пустые подсписки. Я только начал свое приключение с питоном, не будь жестоким;) Любая помощь будет принята с благодарностью.

Ожидаемый результат из списка [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 голосов
/ 02 января 2019

Безопаснее сохранить список сбора внутри функции и вернуть его из функции:

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]]
0 голосов
/ 02 января 2019

Используйте нарезку, если ваш список не является целым числом:

  • Случай 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]]
0 голосов
/ 02 января 2019

Не усложняйте это:

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

Добавление 1 к range конечной точке для включения конечного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...