回答:
他の誰もそれを言及していないので、完全を期すために。配列スライスの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の動作は異なります。開始(END)の後(!)を期待しています。これは初心者にはわかりにくいものです。したがって、Substr(s、begining、LENGTH)の正しい置き換えは
s = s[ beginning : beginning + LENGTH]
s[beginning:][:length]
ここに1つの例が不足しているようです:完全な(浅い)コピー。
>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>
これは、(インターンされた文字列ではなく)シーケンス型のコピーを作成するための一般的なイディオムです[:]
。Shallowはリストをコピーします。明らかな理由もなく使用されているPythonリストスライス構文を参照してください。
a=b
十分なはずです。
[:]
不変タイプではコピーはまったく作成されません。一方でmysequence[:]
、ほとんど無害であるときmysequence
のような不変タイプでstr
、tuple
、bytes
(PY3)またはunicode
(PY2)は、a = b[:]
と等価であるa = b
、それはちょうどそれがとき浅いコピーには無意味なので、それ自体を返すことにそのオブジェクトが応答スライスバイトコードを派遣少し時間を浪費します、オブジェクトアイデンティティテストは別として、不変の自己への別の参照を返すのと同じです。
s[:]
、まったくコピーを作成しませんs = 'abc'; s0 = s[:]; assert s is s0
。はい、それはリストが取得されるまでPythonでリストをコピーする慣用的な方法でしたlist.copy
が、不変タイプの完全なスライスは変更できないため、コピーを作成する理由がありません。それをコピーする時間を無駄にしてはいけません。この答えは間違っていて、質問にも答えないので、削除する必要がありますか?
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部を離れることが「終わりまで」を意味する場合、第1部を離れると、それは最初から始まりますか?
はい、例えば:
>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'
スライスにはstartを含めますが、stopは含めずに、上にのみ移動することに注意してください。
stepがのNone
場合、デフォルトではスライスは1
ステップに使用します。負の整数でステップする場合、Pythonは十分に賢く、最後から最初に進みます。
>>> myString[::-1]
'0987654321'
ディスカッションに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'
myStringにオフセット6から始まり、長さが9の口座番号が含まれている場合、口座番号を次のように抽出できますacct = myString[6:][:9]
。
OPがそれを受け入れた場合、実験的に試してみるとよいでしょう。
myString[2:][:999999]
動作します-エラーは発生せず、デフォルトの「文字列パディング」は発生しません。
myString[offset:][:length]
OPの場合にこの方法を使用したい場合は、そのまま使用できますmyString[offset:][:]
たぶんそれを逃したかもしれませんが、変数についてはここでは詳しく説明されていないため、このページで元の質問に対する完全な回答を見つけることができませんでした。それで私は捜索を続けなければなりませんでした。
私はまだコメントすることが許されていないので、ここに私の結論を付け加えましょう。このページにアクセスしたときに私が興味を持ったのは私だけではなかったと思います。
>>>myString = 'Hello World'
>>>end = 5
>>>myString[2:end]
'llo'
最初の部分を離れると、
>>>myString[:end]
'Hello'
また、中央に:を残した場合、最も単純な部分文字列が得られます。これは5番目の文字になります(0から始まるので、この場合は空白です)。
>>>myString[end]
' '
まあ、私はPHPスクリプトをPythonに変換する必要があり、の多くの使用法がある状況になりましたsubstr(string, beginning, LENGTH)
。
Pythonを選択した場合、多くの終了インデックスstring[beginning:end]
を計算する必要があるため、を使用する方が簡単でしたがstring[beginning:][:length]
、これにより多くの問題を解決できました。
ハードコード化されたインデックス自体を使用すると、混乱する可能性があります。
これを回避するために、Pythonには組み込みオブジェクトが用意されていますslice()
。
string = "my company has 1000$ on profit, but I lost 500$ gambling."
残りの金額を知りたい場合。
通常の解決策:
final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500
スライスの使用:
EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500
スライスを使用すると、読みやすくなります。