Python チュートリアル - データ型文字列

胡金庫 2023年1月30日
  1. Python で文字列を作成する
  2. 文字列の要素にアクセスする
  3. Python 文字列操作
  4. 文字列に適用可能な組み込み関数
  5. Python 文字列フォーマット
  6. 文字列の format() メソッド
Python チュートリアル - データ型文字列

このセクションでは、Python String データ型について説明します。

文字列は、コンピューター内のバイナリデータで表される一連の文字です。Python では、文字列はユニコード文字のコレクションです。

情報
Python 文字列は不変です。

Python で文字列を作成する

文字列は、単一引用符または二重引用符を使用して作成できます。複数行の文字列は、三重引用符を使用して作成することもできます。

x = "String of characters"
x = """Multiline
string"""

文字列の要素にアクセスする

スライス演算子 [] は、文字列の文字にアクセスするために使用されます。インデックスは、他の Python データ型として 0 から始まります。

>>> x = 'Python Programming'
>>> print('x[0] =', x[0])
'P'
>>> print('x[4:15] =', x[4:15])
'on Programm'
>>> x[4] = 'l'
TypeError: 'str' object does not support item assignment
警告
インデックスは整数でなければなりません。そうしないと、TypeError が発生します。

負のインデックス付け

負のインデックスを使用して、文字列内の文字にアクセスできます。たとえば、インデックス -1 は最後の文字を指します。同様に、インデックス -2 は最後から 2 番目の文字を指します。

>>> s = "Python"
>>> print(s[-1])
'n'
>>> print(s[-2])
'o'
>>> print(s[-3])
'h'

文字列から文字を削除する

文字列は不変なので、文字列の文字は削除できません。ただし、同じ名前に新しい文字列を割り当てることができます。これは、以下のコードで示されています。

>>> s = 'Python'
>>> s = 'Program'
>>> s
'Program'

del キーワードを使用して、文字列全体を削除できます。

>>> del s

Python 文字列操作

文字列に対して実行できる操作は多数あります。それらのいくつかは次のとおりです。

2つ以上の文字列を連結する

+ 演算子を使用して、2つ以上の文字列を連結できます。

>>> s1 = 'Python '
>>> s2 = 'Programming'
>>> print(s1 + s2)
'Python Programming'

2つの文字列を一緒に記述する場合、+ 演算子のように文字列を連結します:

>>> print('Python ' 'Programming')
'Python Programming'

文字列が複数行にある場合、括弧を使用して 2つの文字列を連結することもできます。

>>> s = ('Python '
     'Programming')
>>> s
'Pyhton Programming'

文字列を繰り返す

for ループを使用してリストを反復処理できます。

s = "Python"
for i in s:
    print(i)
P
y
t
h
o
n

文字列メンバーシップチェック

in キーワードは、文字列内の部分文字列の存在を確認するために使用されます。

>>> s = 'Python'
>>> print('a' in s)
False
>>> print('o' in s)
True

文字列に適用可能な組み込み関数

他のタイプのシーケンスに適用される関数は、文字列にも適用できます。一般的に使用される関数は、文字列内の文字数を求めるための len() と、文字列内の要素のインデックスと値をペアとして含むオブジェクトを返す enumerate() です。

Python 文字列フォーマット

エスケープシーケンス

エスケープシーケンスは、出力ストリームに特別なシンボル(Python で特別な意味を持つ)を出力するときに使用されます。たとえば、出力する場合:

James asked, "Do you know Andrew's place?"

ここでは、テキストに両方の引用符が含まれているため、単一引用符または二重引用符を使用できません。この文字列を一重引用符または二重引用符で囲むと、SyntaxError が発生します。

>>> print("James asked, "Do you know Andrew's place?"")
SyntaxError: invalid syntax
>>> print('James asked, "Do you know Andrew's place?"')	  
SyntaxError: invalid syntax

この問題の解決策は、三重引用符またはエスケープシーケンスを使用することです。
Python では、エスケープシーケンスはバックスラッシュから始まります。バックスラッシュは、インタープリターへの指示です。

print ステートメントで単一引用符を使用している場合、テキストからの単一引用符はすべてエスケープする必要があります。同様に、文字列を表すために二重引用符を使用している場合は、テキストの二重引用符をエスケープする必要があります。

# using triple quotation marks
print('''James asked, "Do you know Andrew's place?"''')

# escaping single quotes
print('James asked, "Do you know Andrew\'s place?"')

# escaping double quotes
print('James asked, "Do you know Andrew\'s place?"')

Python のエスケープシーケンスが説明されている次の表を検討してください。

エスケープシーケンス 説明
\\ バックスラッシュをエスケープします
\' 単一引用符をエスケープします
\" 二重引用符をエスケープします
\a ASCII アラートまたはベル
\b バックスペースを生成します
\f 用紙送りを生成します
\n 新しい行を生成します。
\r キャリッジリターン
\t 水平タブを生成します
\v 垂直タブを生成します
\ooo 8 進文字 ooo
\xHH 16 進文字 HH
>>> print("C:\\User\\Python36-32\\Lib")
C:\User\Python36-32\Lib
    
>>> print("First Line\nSecond Line")
First Line
Second Line

エスケープシーケンスを無視する生の文字列 r

文字列のエスケープシーケンスを無視するには、文字列の前に r または R で示される生の文字列を作成します。

生の文字列では、エスケープシーケンスは無視されます。次の例を参照してください。

#without r
>>> print("C:\\User\\Python36-32\\Lib")
C:\User\Python36-32\Lib

#with r  
>>> print(r"C:\\User\\Python36-32\\Lib")
C:\\User\\Python36-32\\Lib

ここで、エスケープシーケンスが無視されることがわかります。

文字列の format() メソッド

format() メソッドは文字列をフォーマットするための強力なツールです。フォーマットされた文字列には、format() メソッドによって置き換えられるプレースホルダー {} があります。

位置引数とキーワード引数は、置換の順序を指定するために使用されます。

#default placeholder
>>> s1 = "{}, {} and {}".format('Bread', 'Butter', 'Chocolate')
>>> print(s1)
'Bread, Butter and Chocolate'

#positional arguments
>>> s2 = "{1}, {2} and {0}".format('Bread', 'Butter', 'Chocolate')	  
>>> print(s2)
'Butter, Chocolate and Bread'

#keyword arguments
>>> s3 = "{a}, {x} and {c}".format(x = 'Bread', c = 'Butter', a = 'Chocolate')	  
>>> print(s3)
'Chocolate, Bread and Butter'
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook