使用列表推导创建升序和降序的一般列表

时间:2013-10-29 02:35:18

标签: python arrays list-comprehension

我正在尝试生成一个包含升序和降序数字混合的列表。

例如,假设你有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 个答案:

答案 0 :(得分:5)

我知道你指的是你想要一个列表组合,但是它真的有必要吗?

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

(python 3语法)

或者,在python2中:

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

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

我认为第一个更具可读性,但是ymmv。

答案 1 :(得分:2)

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]

答案 2 :(得分: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)]