2012-11-13 231 views
6

我只是來越過這讓我困惑了一下下面的Python代碼:'result [:: - 1]'是什麼意思?

res = self.result[::-1].encode('hex') 

的編碼的東西是很清楚的,它應該被表示爲十六進制值。但是,什麼 做self.result [:: - 1]的意思,特別是冒號?

回答

9

它代表了從結果中獲得的'切片'。第一個元素是起始位置,第二個元素是結束位置(非包含),第三個是步驟。冒號前/後的空值表示您要麼從開頭(s[:3])開始或延伸到結尾(s[3:])。你也可以在這裏包括實際的數字,但是如果可能的話將它們排除在外是比較習慣的。

例如:

In [1]: s = 'abcdefg' 

返回字符串的啓動在開始和索引位置2停止切片:開始於第三

In [2]: s[:3] 
Out[2]: 'abc' 

返回字符串的切片索引位置並延伸到末端:

In [3]: s[3:] 
Out[3]: 'defg' 

返回字符串的切片開始於結束時和在一個時間步長上向後移動一個元件:

In [4]: s[::-1] 
Out[4]: 'gfedcba' 

返回字符串的包含所有其他元素的切片:

In [5]: s[::2] 
Out[5]: 'aceg' 

它們都可以在彼此組合使用以及。在這裏,我們返回返回所有其他元素開始索引位置6和去索引位置2切片(注意s[:2:-2]會更地道,但我挑的字母奇異數:)):

In [6]: s[6:2:-2] 
Out[6]: 'ge' 

step元素確定要返回的元素。在你的例子中,-1表示它將一次一個元素向後退一步。

+0

太棒了,這很容易理解。所以基本上,這只是在這裏使用的列表操作! – Patrick

+0

@Patrick你懂了:)你會經常看到它的字符串/列表,它甚至可以用於列表情況下的賦值(例如'l = ['one','two',3']; l [:2] = ['changed']')。希望能幫助到你! – RocketDonkey

2

這是一個反轉列表的常用成語。

a = ['a', 'b', 'c', 'd'] 
b = a[::-1] 
print b 

['d', 'c', 'b', 'a'] 

你可以閱讀'延長切片'here

+3

不幸的話選擇,它不反轉一個列表! 'a.reverse()'反轉列表'a'。 'a [:: - 1]'返回'a'的反轉副本。 – Junuxx

+1

雖然是真的,但我的措辭是有意的;這種區別可能最終會讓初學者感到困惑,通常在簡化和處理抽象之前,它們通常會更好地服務,直到出現意想不到的事情爲止。變量賦值和可變性是另一天的教訓。 – kreativitea