Python プログラミング - 文字列処理の特別な方法

学習目標:

  1. 文字列の作成方法を学ぶ
  2. len、min、max 関数を使用して、文字列の長さ、文字列内の最大文字と最小文字を取得します。
  3. 文字列内の要素にアクセスするには、添字演算子 ([]) を使用します。
  4. インターセプト演算子 str[start:end] を使用して、長い文字列から部分文字列を取得します。
  5. + 演算子を使用して 2 つの文字列を連結し、* 演算子を使用して文字列をコピーします
  6. in 演算子と not in 演算子を使用して、文字列が別の文字列内に含まれているかどうかを判断します
  7. 文字列は比較演算子 (==、!=、<、<=、>、>=) を使用して比較されます。
  8. for ループを使用して文字列内の文字を反復処理する
  9. isalnum、isalpha、isdigital、isidentifier、islower、isupper、isspace メソッドを使用して文字列をテストする
  10. endwith、startswith、find、rfind、count メソッドを使用して部分文字列を検索します。
  11. Capitalize、Lower、Upper、title、swapcase、replace メソッドを使用して文字列を変換します。
  12. lstrip、rstrip、strip メソッドを使用して文字列の左側または右側からスペースを削除します。
  13. center、ljust、rjust、format メソッドを使用して文字列をフォーマットする
  14. アプリケーション開発中に文字列を適用する (CheckPalindrome、Hex ToDecimalConversion)
  15. 演算子用の特別なメソッドを定義する
  16. 有理数を表現するための Rational クラスの設計

I.はじめに

        キーポイント: この章ではクラス設計に焦点を当て、例として Python の str クラスを使用し、Python の特別なメソッドの役割を検討します。

        前回の記事では、クラスとオブジェクトに関するいくつかの重要な概念を紹介しました。クラスを定義する方法と、オブジェクトを作成して使用する方法を学びました。str クラスは文字列を表現するのに役立つだけでなく、クラス設計の良い例でもあります。この記事では、str クラスについてさらに詳しく説明します。Python 言語では特別なメソッドが非常に重要な役割を果たします。ここでは、特別なメソッドを使用したクラスの設計だけでなく、いくつかの特別なメソッドと演算子のオーバーロードも紹介します。

2、strクラス

キーポイント: str オブジェクトは不変です。つまり、文字列が作成されると、その内容は不変になります。

2.1、文字列を作成する

次のようにコンストラクターを使用して文字列を構築できます。

s1 = str() # Create an empty string object
s2 = str("Welcome") # Create a string object for We lcome

Python には、文字列値を使用して文字列を作成するための簡単な構文が用意されています。例えば:

s1 = " "# Same as s1= str()
s2 = "Welcome" # Same as s2 = str("Welcome")

        文字列オブジェクトは不変です。文字列オブジェクトが作成されると、その内容は変更できません。パフォーマンスを最適化するために、Python はオブジェクトを使用して同じ内容の文字列を表します。図に示すように、s1 と s2 は両方とも同じ文字列オブジェクトを指しており、両方とも同じ ID 番号を持っています。

        このアクションは、Python ライブラリ内のすべての不変オブジェクトに当てはまります。例: int は不変クラスです。図に示すように、同じ値を持つ 2 つの int オブジェクトは、実際には同じオブジェクトを共有します。

2.2. 文字列を処理する関数

        Python の組み込み関数の一部は文字列を処理します。len 関数を使用して文字列内の文字数を返し、max 関数と min 関数を使用して文字列内の最大文字と最小文字を返すことができます。ここではいくつかの例を示します。

>>> S = "We1come"
>>> len(s)
7
>>> max(s)
'o'
>>> min(s)
'W'
>>>

        文字列 s には 7 文字があるため、len(s) は 7 を返します。注: 小文字の ASCII コード値は小文字の ASCII コード値より大きいため、max(s) は o を返し、min(s) は W を返します。

2.3. 下付き演算子 [ ]

文字列は一連の文字です。次の構文を使用して、添字演算子を使用して文字列内の文字にアクセスできます。

s[index]

添字は 0 から始まり、図に示すように 0 から len(s)-1 までの範囲になります。

2.4. インターセプト演算子 [開始 : 終了]

        インターセプト演算子は、s[start:end] という構文を使用して文字列のセグメントを返します。この段落は、subscript start から subscript end-1 までの部分文字列です。例えば:

>>> s = "Welcome"
>>> s[1 : 4]
elc

s[1:4] はインデックス 1 からインデックス 3 までの部分文字列を返します。

        開始添え字または終了添え字は無視できます。この場合、デフォルトの開始インデックスは 0 で、終了インデックスは最後のインデックスです。例えば:

>>> S = "Welcome"
>>>s[ :6]
'Welcom'
>>> s[4: ]
'ome'
>>>s[1:-1]
elcom
>>>

        2 行目では、s[:6] と s[0:6] は同じであり、どちらもインデックス 0 からインデックス 5 までの部分文字列を返します。4 行目では、s[4: ] と s[4:7] は同じであり、両方とも添え字 4 から添え字 6 までの部分文字列を返します。文字列をインターセプトするときに負の添字を使用することもできます。たとえば、6 行目では、s[1:-1]s[1:-1+len(s)] は同じです

        注: インターセプト操作 s[i:j] の添字 (i または j) が負の数の場合は、len(s)+index を使用して添字を置き換えます。j>len(s) の場合、j は len(s) に設定されます。i>=j の場合、インターセプトされた部分文字列は空の文字列になります。

2.5. 接続演算子 + とコピー演算子 *

        連結演算子 + を使用して、2 つの文字列を結合または連結できます。コピー演算子 * を使用して、同じ文字列を複数回連結することもできます。ここではいくつかの例を示します。

>>> s1 = "Welcome"
>>> s2 = "Python"
>>> s3 = s1 + "to" + s2
>>> s3
'Welcome to Python'
>>> s4 = 3 * s1
>>> s4
'WelcomeWelcomeWelcome'
>>> s5 = s1 * 3
>>>s5
'WelcomeWelcomeWelcome'
>>>

注: 3*s1 と s1*3 は同じ効果があります。

2.6. in 演算子と notin 演算子

in 操作と not in 操作を使用して、文字列が別の文字列内にあるかどうかをテストできます。ここではいくつかの例を示します。

>>> s1 = "Welcome" 
>>> "come" in s1
True
>>> "come" not in s1
False
>>>

別の例を次に示します。

s = input("Enter a string: ")
if "Python" in s:
    print("Python","is in", s)
else:
    print("Python","is not in", s)

        「Python へようこそ」という文字列を入力としてこのプログラムを実行すると、プログラムには「Python は Python へようこそ」と表示されます。
        

2.7. 文字列の比較

        比較演算子 (==、!=、>、<. >=、および <= が導入されました) を使用して文字列を比較できます。Python では、文字列内の対応する文字を比較することで、文字の数値コードを計算することで比較を実行します。たとえば、a の数値コードは A の数値コードより大きいため、a は A より大きくなります。

        文字列 s1("Jane") と s2("Jake") を比較する必要があるとします。まず、s1 と s2 の最初の文字 (J と J) を比較します。これらは同じなので、2 番目の文字 (a と a) を比較します。これらも同じなので、3 番目の文字 (n と k) を比較します。n の ASCII コード値は k より大きいため、s1 は s2 より大きくなります。

        ここではいくつかの例を示します。

>>>'green' == 'glow'
False
>>> "green" != "g1ow"
True
>>> "green" > "glow"
True
>>> "green" >= "glow"
True
>>> "green" < "g1ow"
False
>>> "green" <= "g1ow"
False
>>> "ab" <= "abc"
True
>>>

2.8. 文字列の反復

        文字列は反復可能です。これは、for ループを使用して、文字列内のすべての文字を順番に反復処理できることを意味します。たとえば、次のコードは文字列 s 内のすべての文字を表示します。

for ch in s:
    print(ch)

このコードは、「s 内のすべての文字 ch に対して、ch を出力する」と読むことができます。

        この for ループでは、文字にアクセスするために添字を使用しません。ただし、文字を別の順序で反復処理する場合は、やはり添え字を使用する必要があります。たとえば、次のコードは、文字列内の奇数の位置にある文字を表示します。

for i in range(0, len(s), 2):
    print(s[i])

        このコードは、変数 i を文字列 s の添字として使用します。i は 0 から始まり、len(s) に達するかそれを超えるまで 2 ずつ増加します。i の各値について、s[i] を出力します。

2.9、テスト文字列

2.10. 検索文字列

2.11. 文字列の変換

 注: 前述したように、文字列は不変です。str クラスには文字列の内容を変更できるメソッドはなく、これらのメソッドは新しい文字列を作成します。

2.12. 文字列内のスペースを削除する

        次の図のメソッドを使用すると、文字列の先頭、末尾、または両端から文字列内のスペースを削除できます。思い出し
てください。文字 ' '、\t、\f、\r、および \n はすべて空白文字と呼ばれます。

        注: 空白文字を削除する方法では、文字列の前後の空白文字のみを削除でき、空白以外の文字で囲まれた空白文字は削除できません。

        ヒント: 入力文字列にstrip()メソッドを適用して、入力の末尾にある不要な文字が確実に削除されるようにすることをお勧めします。

2.13. フォーマット文字列


 以下に、center、ljust、および rjust メソッドを使用した例をいくつか示します。

>>> s = "Welcome"
>>> s1 = s.center(11)
>>>s1
'  Welcome  '
>>> s2 = s.ljust(11)
>>>>s2
'Welcome       '
>>> s3 = s.rjust(11)
>>;>>s3
'      Welcome '
>>>

        2 行目で、s.center(11) は文字列 s を 11 文字の文字列の中央に配置します。5 行目で、s.ljust(11) は文字列 s を 11 文字の文字列の左端に配置します。8 行目で、s.rjust(11) は文字列 s を 11 文字の文字列の右端に配置します。

3. 演算子のオーバーロードと特別なメソッド

キーポイント: Python では、一般的に使用される操作を実装するための演算子と関数の特別なメソッドを定義できます。Python では、これらのメソッドの関連性を区別するために、独自の名前付け方法が使用されています。

        これまで、演算子を使用して文字列操作を実行する方法を学習しました。演算子 + は 2 つの文字列を結合するために使用でき、演算子 * は同じ文字列を複数回結合することができます。関係演算子 (==、!=.<.<=、>、>=) は 2 つの文字を比較するために使用されます。添え字演算子 [] は文字にアクセスするために使用されます。例えば:

s1 ="Washi ngton"
s2 = "Cali fornia"
print("The first character in s1 is",s1[0] )
print("s1+s2is",s1+s2)
print("s1 < s2?",s1 < s2 )

        これらの演算子は実際には。上記はstrクラスに定義されているメソッドです。演算子のメソッドを定義することを演算子のオーバーロードと呼びます。演算子のオーバーロードにより、プログラマは組み込み演算子を使用してユーザーのメソッドを定義できるようになります。次の表に、演算子とメソッド間のマッピングを示します。これらのメソッドに名前を付けるときは、Python がそれらの関連性を識別できるように、名前の前後に 2 つのアンダースコアを追加します。例: 演算子 + をメソッドとして使用するには、__add__ という名前のメソッドを定義する必要があります。注: これらのメソッドには、先頭の 2 つのアンダースコアに加えて末尾の 2 つのアンダースコアがあるため、プライベートではありません。要約すると、クラス内の初期化子は __init__ という名前が付けられ、これはオブジェクトを初期化するための特別なメソッドです。

たとえば、前のコードを次のように書き直すことができます。

s1 = "Washington"
s2 = "California"
print("The first character in sl is", s1.__ getitem__(0) )
print("s1 + s2 is", s1.__add__ (s2))
print("s1 < s2?", s1.__lt_ __ (s2))

        s1.__getitem__ (0) は s1[0] と同じ、sl.__add__ (s2) は s1+s2 と同じ、s1.__lt__ (s2) は s1<s2 と同じです。ここで、演算子をオーバーロードする利点がわかります。演算子をオーバーロードすると、プログラムが大幅に簡素化され、読みやすく保守しやすくなります。

        Python は in 演算子をサポートしています。この演算子を使用すると、文字が別の文字列内にあるかどうか、または要素がコンテナのメンバーであるかどうかを判断できます。対応するメソッドの名前は __contains__(self,e) です。メソッド __contain__ を使用するか、in 演算子を使用して、文字が文字列内にあるかどうかを判断できます。コードは次のとおりです。

1 s1 = "Washi ngton"
2 print("Is W in s1?", 'W' in s1 )
3 print("Is W in s1?", s1.__contains__('W') )

s1 の W は s1.__ contains__('w') と同じです。

クラスで __len__ (self) メソッドが定義されている場合、Python では便利な構文を使用してメソッドを関数として呼び出すことができます。例: __len__ メソッドは str クラスで定義されており、このメソッドは文字列内の文字数を返します。__len__ メソッドまたは len 関数を使用して、文字列内の文字数を取得できます。コードは次のとおりです。

1 s1 = "Washington"
2 print("The 1ength of s1 is", 1en(s1))
3 print("The 1ength of s1 is", s1.__1en__())

len(s1) と s1.__ len__ () は同じです。

        int や float など、Python の組み込み型に対して多くの特別な演算子が定義されています。i が 3、j が 4 であるとします。i.__add__(j) は i+j と同じであり、i.__sub__(j) は ij と同じです。

注: オブジェクトを渡して print(x) を呼び出すことができます。これは、print(x.__ str__()) または print(str(x)) を呼び出すことと同じです。

        注: 比較演算子 (==、!=、<、<=、>、および >=) は、メソッド __ cmp__(self, other) を使用して実装することもできます。self<other の場合、メソッドは負の整数を返します。self==other の場合、メソッドは 0 を返します。self>other の場合、メソッドは正の整数を返します。2 つのオブジェクト a と b について、__It____ が使用可能な場合、a<b は a.__It__(b) を呼び出します。そうでない場合は、__cmp__ メソッドを呼び出して順序を決定します。

4. まとめ

  • 文字列オブジェクトは不変であり、その内容は変更できません。
  • Python 関数 len、min、max を使用して、文字列の長さ、最大要素、最小要素を返すことができます。
  • 添字演算子 [] を使用して、文字列内の単一の文字を指すことができます。
  • 連結演算子 + を使用して 2 つの文字列を接続し、コピー演算子 * を使用して文字列を複数回コピーし、インターセプト演算子 [: ] を使用して部分文字列を取得し、演算子 in および not in を使用して文字が 1 にあるかどうかを判断できます。文字列。
  • 比較演算子 (==、!=、<、<=、>、>=) を使用して 2 つの文字列を比較します。
  • for ループを使用して、文字列内のすべての文字を反復処理します。
  • endwith、startswitch、isalpha、islower、isupper、 lower、upper、find、count、replace、strip などの関数は、文字列オブジェクトに対して使用できます。
  • オーバーロードされた操作に対して特別なメソッドを定義できます。

おすすめ

転載: blog.csdn.net/java_faep/article/details/132302679