23

重複
の可能性: Python Slice Notation

一部の Python コードを C に移植しようとしていますが、次の行に出くわし、その意味がわかりません。

if message.startswith('<stream:stream'):
    message = message[:-1] + ' />'

'messageで始まる場合<stream:stream、何かを追加する必要があることを理解しています。ただし、どこに追加する必要があるのか​​\u200b\u200bわかりません。何を指しているのか全くわかりません:-1。結果なしでいくつかのGoogle検索を行いました。

誰かがこれが何をするのか説明してくれるでしょうか?

4

5 に答える 5

59

これはリストのインデックス付けであり[:]、最後の要素を除くすべての要素を返します-1。同様の質問はこちら

例えば、

>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]

それはこのように動作します

a[start:end]

>>> a[1:2]
[2]

a[start:]

>>> a[1:]
[2, 3, 4, 5, 6]

a[:end]
あなたの場合

>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]

a[:]

>>> a[:]
[1, 2, 3, 4, 5, 6]
于 2013-01-19T21:48:04.743 に答える
7

これはスライシングと呼ばれmessage、最後の要素以外のすべてを返します。

これを理解する最良の方法は、例を使用することです。

In [1]: [1, 2, 3, 4][:-1]
Out[1]: [1, 2, 3]
In [2]: "Hello"[:-1]
Out[2]: "Hell"

いつでも任意の数字に置き換えることができます-1:

In [4]: "Hello World"[:2] # Indexes starting from 0
Out[4]: "He"

最後のインデックスは含まれません。

于 2013-01-19T21:49:57.637 に答える
3

それは呼ばれていますslicing

「範囲 (開始、停止、ステップ) で指定された一連のインデックスを表すスライス オブジェクトを返します。」
-このリンクから: http://docs.python.org/2/library/functions.html#slice

これは range 引数に似ていることに気付くでしょう。この:部分は iterable 全体を返すため-1、最後のインデックスを除くすべてです。

スライスの基本的な機能は次のとおりです。

>>> s = 'Hello, World'
>>> s[:-1]
'Hello, Worl'
>>> s[:]
'Hello, World'
>>> s[1:]
'ello, World'
>>> s[5]
','
>>>

次の引数に従います。

a[start:stop:step]

または

a[start:stop, i] 
于 2013-01-19T21:47:57.607 に答える
0

message最後の要素なしで返されます。messageが文字列の場合message[:-1]、最後の文字を削除します。

チュートリアルを参照してください。

于 2013-01-19T21:48:07.580 に答える
0

あなたのケースに直接答えるには:

if message.startswith('<stream:stream'): message = message[:-1] + ' />'

messageこれは基本的に、で始まるかどうかをチェックし、<stream:streamその場合は最後の文字を削除して代わりに a を追加し' />'ます。

したがって、メッセージは XML 文字列であるため、要素が空の要素になり、それ自体が閉じられます。

于 2013-01-19T21:58:13.100 に答える