我正在尝试生成一个包含升序和降序数字混合的列表。
例如,说你有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)]
但我似乎无法做到这一点。
我正在尝试生成一个包含升序和降序数字混合的列表。
例如,说你有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)]
但我似乎无法做到这一点。
我知道你指定你想要一个列表组合,但这真的有必要吗?
list(range(5)) + list(reversed(range(4)))
(python 3 语法)
或者,在 python2 中:
range(5) + range(4)[::-1]
或者
range(5) + range(3,-1,-1)
我认为第一个更具可读性,但是 ymmv.
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)]