>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'
Pythonはこの概念を「スライス」と呼び、文字列だけでなく機能します。 包括的な紹介については、こちらを
完全を期すために、他の誰もそれについて言及していません。 配列スライスの3番目のパラメーターはステップです。 したがって、文字列を逆にするのは次のように簡単です。
some_string[::-1]
または、代替文字を選択すると、次のようになります。
"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
文字列を前後に移動する機能は、スライスを最初または最後から配列できることとの一貫性を維持します。
Substr()は通常(つまりPHPとPerl)次のように機能します。
s = Substr(s, beginning, LENGTH)
したがって、パラメータはbeginning
とLENGTH
です。
しかし、Pythonの動作は異なります。 開始と終了の後に1つ(!) これは初心者が見つけるのは難しいです。 したがって、Substr(s、beginning、LENGTH)の正しい置換は次のとおりです。
s = s[ beginning : beginning + LENGTH]
これを実現する一般的な方法は、文字列のスライスです。
MyString[a:b]
は、インデックスaから(b-1)までの部分文字列を提供します。
ここでは1つの例が欠落しているようです:完全な(浅い)コピー。
>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>
これは、シーケンスタイプのコピー(インターン文字列ではない) [:]
を作成するための一般的なイディオムです。 浅いコピーはリストをコピーします。
Pythonで文字列を部分文字列化して、3番目の文字から文字列の最後まで新しい文字列を取得する方法はありますか?
たぶん
myString[2:end]
?
はい、これは実際には、名前end
を定数シングルトンNone
割り当てるか、バインドすると機能します。
>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'
スライス表記には、次の3つの重要な引数があります。
指定されていない場合のデフォルトはNone
が、明示的に渡すことができます。
>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'
2番目の部分を残すことが「最後まで」を意味する場合、最初の部分を残す場合、それは最初から始まりますか?
はい、例:
>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'
スライスに開始を含めますが、停止のみを含め、停止を含めないことに注意してください。
ステップがNone
場合、デフォルトでは、スライスはステップに1
を使用します。 負の整数でステップする場合、Pythonは最後から最初まで進むのに十分賢いです。
>>> myString[::-1]
'0987654321'
「終わり」を除いて、あなたはそこにそれを持っています。 これはスライス表記と呼ばれます。 あなたの例は読むべきです:
new_sub_string = myString[2:]
2番目のパラメーターを省略すると、暗黙的に文字列の終わりになります。
myStringに、オフセット6で始まり、長さが9のアカウント番号が含まれている場合は、次の方法でアカウント番号を抽出できます: acct = myString[6:][:9]
。
OPがそれを受け入れた場合、実験的な方法で試してみたいと思うかもしれません。
myString[2:][:999999]
それは機能します-エラーは発生せず、デフォルトの「文字列パディング」は発生しません。
議論に2つのポイントを追加したいと思います。
空のスペースで代わりにNone
使用して、「最初から」または「最後まで」を指定できます。
'abcde'[2:None] == 'abcde'[2:] == 'cde'
これは、引数として空のスペースを指定できない関数で特に役立ちます。
def substring(s, start, end):
"""Remove `start` characters from the beginning and `end`
characters from the end of string `s`.
Examples
--------
>>> substring('abcde', 0, 3)
'abc'
>>> substring('abcde', 1, None)
'bcde'
"""
return s[start:end]
Pythonにはスライスオブジェクトがあります:
idx = slice(2, None)
'abcde'[idx] == 'abcde'[2:] == 'cde'
さて、PHPスクリプトをPythonに変換する必要があり、 substr(string, beginning, LENGTH)
使用法が多かったという状況になりました。
Pythonのstring[beginning:end]
を選択した場合、多くのエンドインデックスを計算string[beginning:][:length]
を使用する方が簡単で、多くの手間を省くことができました。