我知道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))))' –