2472

3番目の文字から文字列の最後まで新しい文字列を取得するために、Pythonで文字列をサブストリング化する方法はありますか?

たぶん好きmyString[2:end]

後編を抜けるとは「最後まで」という意味で、前編を抜けると最初から?

4

15 に答える 15

457

他の誰も言及していないので、完全を期すために。配列スライスの 3 番目のパラメーターはステップです。したがって、文字列を逆にするのは次のように簡単です。

some_string[::-1]

または、代替文字を選択すると、次のようになります。

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

文字列を前後にステップする機能は、最初または最後から配列スライスできることとの一貫性を維持します。

于 2012-03-20T00:58:50.573 に答える
151

Substr() は通常 (つまり、PHP と Perl)、次のように動作します。

s = Substr(s, beginning, LENGTH)

したがって、パラメータはbeginningLENGTHです。

しかし、Python の動作は異なります。開始と END の 1 つ後 (!) が必要です。これは初心者にはわかりにくいです。したがって、Substr(s、開始、LENGTH) の正しい置換は次のとおりです。

s = s[ beginning : beginning + LENGTH]
于 2012-08-04T11:43:03.103 に答える
72

これを実現する一般的な方法は、文字列のスライスです。

MyString[a:b]インデックスaから(b-1)までの部分文字列を提供します。

于 2012-03-02T05:19:02.317 に答える
28

ここでは1つの例が欠落しているようです:完全な(浅い)コピー。

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>

これは、シーケンスタイプ(インターン文字列ではない)のコピーを作成するための一般的なイディオムです[:]。浅いコピーはリストをコピーします。明白な理由なしに使用されるPythonリストスライス構文を参照してください。

于 2009-03-19T18:02:38.807 に答える
23

3番目の文字から文字列の末尾まで新しい文字列を取得するために、Pythonで文字列をサブストリング化する方法はありますか?

たぶん好きmyString[2:end]

はい、これは、名前を定数シングルトン に割り当てるかバインドすると実際に機能します。endNone

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

スライス表記には 3 つの重要な引数があります。

  • 始める
  • 止まる
  • ステップ

指定されていない場合のデフォルトは次のとおりですNoneが、明示的に渡すことができます。

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

後編を抜けることが「最後まで」だとしたら、前編を抜けると最初からですか?

はい、例えば:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

スライスには start が含まれていますが、stop までは含まれず、stop までしか含まれていないことに注意してください。

step がNoneの場合、デフォルトでは、スライスは1ステップに使用します。負の整数でステップする場合、Python は十分に賢く、最後から最初に進みます。

>>> myString[::-1]
'0987654321'

スライス表記の説明の質問への回答で、スライス表記について詳しく説明しています。

于 2017-06-23T21:53:56.940 に答える
11

「終わり」を除いて、すぐそこにあります。スライス表記といいます。あなたの例は次のようになります。

new_sub_string = myString[2:]

2 番目のパラメーターを省略すると、暗黙的に文字列の末尾になります。

于 2009-03-19T17:31:34.060 に答える
10

議論に次の 2 点を追加したいと思います。

  1. 空のスペースで代わりに使用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]
    
  2. Python にはスライスオブジェクトがあります。

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    
于 2016-08-31T04:28:09.603 に答える
5

見逃したのかもしれませんが、ここでは変数についてこれ以上説明していないため、元の質問に対する完全な回答をこのページで見つけることができませんでした。だから私は探し続けなければなりませんでした。

私はまだコメントすることを許可されていないので、ここに私の結論を追加させてください. このページにアクセスしたときに興味を持ったのは私だけではなかったと確信しています。

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

最初の部分を残すと、

 >>>myString[:end]
 'Hello' 

そして、途中で : を残すと、最も単純な部分文字列が得られます。これは 5 番目の文字になります (0 から数えるため、この場合は空白です)。

 >>>myString[end]
 ' '
于 2015-03-18T12:01:43.047 に答える
4

ハードコーディングされたインデックス自体を使用すると、混乱する可能性があります。

それを避けるために、Python は組み込みの object を提供しています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

スライスを使用すると読みやすくなります。

于 2016-08-31T04:50:52.077 に答える