Создание общего списка восходящих и нисходящих чисел с использованием понимания списка

Я пытаюсь создать список, содержащий смесь восходящих и нисходящих чисел.

например, скажем, у вас есть n=5, Я хочу создать список / массив на основе n такой что у тебя есть:

[0,1,2,3,4,3,2,1,0]

используя понимание списка.

Я пытался сделать это:

print [[i+j] for i in range(n)for j in range(n,-1,-1)]

но я не могу понять это правильно.

3 ответа

Я знаю, что вы указали, что хотели получить список рассылки, но действительно ли это необходимо?

list(range(5)) + list(reversed(range(4)))

(синтаксис Python 3)

Или в python2:

range(5) + range(4)[::-1]

или же

range(5) + range(3,-1,-1)

Я думаю, что первый является более читабельным, но мммм.

In [27]: n = 5

In [28]: [n-1-abs(i-n+1) for i in range(n*2-1)]
Out[28]: [0, 1, 2, 3, 4, 3, 2, 1, 0]

Обновить

Этот может быть более ясным

In [36]: [n-abs(i) for i in range(-n,n+1)]
Out[36]: [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]

Один лайнер:

[i if i < n else 2*(n-1)-i for i in range(2*(n-1) + 1)]

Более эффективным:

_top = 2*(n-1)
[i if i < n else _top-i for i in range(_top + 1)]
Другие вопросы по тегам