我知道a [end:start:-1]以相反的顺序对列表进行切片。Python中的反向索引?
例如
a = range(20)
print a[15:10:-1] # prints [15, ..., 11]
print a[15:0:-1] # prints [15, ..., 1]
,但你不能去(在本例中0)的第一要素。看来,-1是一个特殊的价值。
print a[15:-1:-1] # prints []
任何想法?
我知道a [end:start:-1]以相反的顺序对列表进行切片。Python中的反向索引?
例如
a = range(20)
print a[15:10:-1] # prints [15, ..., 11]
print a[15:0:-1] # prints [15, ..., 1]
,但你不能去(在本例中0)的第一要素。看来,-1是一个特殊的价值。
print a[15:-1:-1] # prints []
任何想法?
您可以将变量分配给None
:
>>> a = range(20)
>>> a[15:None:-1]
[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>>
这个(使用'None')可能是最好的解决方案,但是请注意,您也可以使用负指标:'a [-5:-21:-1] '让你得到同样的片段,包括最后的'a [0]'元素。 – torek
@torek我也考虑过使用负指数,但我认为这是最好的解决方案,因为你可以避免额外的分配给'无'(见我的答案)。 –
省略结束索引:
print a[15::-1]
开始和结束实际上是变量。 –
我需要一个特殊的if语句吗? –
如果你不介意这样做,你可以在没有if语句的情况下做两个步骤:'print a [low:high + 1] [:: - 1]' – Pablo
编辑:开始和结束都是变量
我从来没有意识到这一点,但(稍微哈克)解决方案是:
>>> a = range(5)
>>> s = 0
>>> e = 3
>>> b = a[s:e]
>>> b.reverse()
>>> print b
[2, 1, 0]
开始和结束是变量 –
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> print a[:6:-1]
[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7]
>>> a[7] == a[:6:-1][-1]
True
>>> a[1] == a[:0:-1][-1]
True
因此,当你在开始标签中替换一个值时可以看到:e nd:它会从头到尾给你一个[结束]。
正如你在这里也看到:
>>> a[0:2:]
[0, 1]
-1是在最后一个值:
>>> a[len(a)-1] == a[-1]
True
http:/ /stackoverflow.com/a/509295/1031417 – 0x90
如果使用负索引你能避免额外的任务,只用你的开始和结束变量:
a = range(20)
start = 20
for end in range(21):
a[start:-(len(a)+1-end):-1]
在Python2.x,以字符数方面最简单的办法也许应该是:
>>> a=range(20)
>>> a[::-1]
[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
虽然我想指出,如果使用xrange(),索引不起作用,因为xrange()为您提供xrange对象而不是列表。在Python3.x中,range()在Python2.x中执行xrange()的操作,但它也有一个改进,接受索引对象的索引更改。
>>> a = range(20)
>>> a[::-1]
range(19, -1, -1)
>>> b=a[::-1]
>>> for i in b:
... print (i)
...
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
>>>
范围之间的差值()和x范围()从源了解到:http://pythoncentral.io/how-to-use-pythons-xrange-and-range/ 由作者:乔伊佩恩
呃?这是答案吗? –
我的直接答案只是[:: - 1]。以下部分是人们可能发现的一些可能的复杂情况,如果他们使用不同版本的python。对此感到抱歉。我是新来的,你认为我应该删除非直接回答部分,我应该把它放在哪里?谢谢! –
[Python的切片表示法](http://stackoverflow.com/questions/509211/ python-slice-notation) –
这对你也很有趣:'print(list(reversed(range(5))))' –