2012-11-13 6 views
6

私はちょうど私を少し混乱し、次のpythonコードを横断来ています:「result [:: - 1]」とはどういう意味ですか?

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

エンコードのものは、それが進値として表現されなければならない、かなり明確です。しかし、何ですか このself.result [:: - 1]意味、特にコロンですか?

答えて

9

これは、結果から取得する 'スライス'を表します。最初の要素は開始位置、2番目は終了(非包含的)、3番目はステップです。コロンの前/後の空の値は、最初(s[:3])から末尾(s[3:])までのいずれかであることを示します。実際の数字もここに含めることができますが、できるだけ省略しておくのはもっと慣れています。例えば

In [1]: s = 'abcdefg' 

戻り始めに開始され、インデックス位置2で停止した文字列のスライス:第三で始まる文字列のスライスを

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

戻りますインデックスの位置を指定して最後まで拡張します。

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

文字列のスライスを返します彼らはすべて、互いに組み合わせて使用​​することができます

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

:それは一度後方に一つの要素の端から始まり、段階:他のすべての要素を含む文字列の

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

リターンをスライス同じように。ここでは、インデックス位置6から始まる、インデックス位置2に行く他のすべての要素を返しスライスを返す(s[:2:-2]がより慣用的になることに注意してください、私は手紙の不思議数:)選ん):

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

をstep要素は、返す要素を決定します。あなたの例では、-1は、一度に1要素ずつ項目を後ろに進めることを示します。

+0

偉大な、それは理解しやすいです。したがって、本質的にこれは、ここで使用されるリスト操作以外の何ものでもありません。 – Patrick

+0

@Patrickあなたはそれを持っています:)あなたは文字列/リストでそれを頻繁に見るでしょうし、リストの場合には代入に使うことさえできます( 'l = ['one'、 'two'、three ']; 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

関連する問題