バックグラウンド
多くの Python 初心者にとって、各データの構造と機能を理解することは非常に困難です。
したがって、プログラム内の各基本タイプの構造、表現、使用法、および応用を理解することが非常に必要です。この記事では、基本的な型の文字列の関連情報を、シンプルかつ明確な言葉で説明することを目指しています。
導入
String は String とも呼ばれ、Python で最も一般的なデータ型であり、通常、str
Python では String の略語で表されます。
紐の役割
文字列はテキスト情報を記録するために使用され、処理して再度表示することができ、機械が人間と通信するための重要な方法です。
文字列の表現
次のコードに示すように、Pythonでは'
文字列は一重引用符または二重引用符で囲まれます。"
text1 = "Hello World"
text2 = 'Hello World'
等号の左側は変数、等号の右側は文字列です。Hello World
一重引用符と二重引用符の違いと文字列での表現方法
Python では、一重引用符を使用して文字を囲んで文字列を定義することも、二重引用符を使用して文字を囲んで文字列を定義することもできます。その違いと機能は何ですか? 文字列を作成する 2 つの方法をサポートする理由。
二重引用符で囲まれた文字列内の二重引用符を表示したい場合、"
次のコードに示すように、二重引用符を直接入力するとプログラム例外が発生します。
text = "双引号的表现符号是:" "
# 输出:
File "<stdin>", line 1
text = "双引号的表现符号是:" "
^
SyntaxError: EOL while scanning string literal
出力に示されているように、SyntaxError
これは Python の基本的なエラー タイプの 1 つであるsyntax errorです。
コロンの後にはエラーの説明が続きます。EOL while scanning string literal
中国語に翻訳: 文字列リテラルをスキャンするときに遭遇EOL
、EOL
通常はプロジェクトの終了を指しますが、Python ではターミネータに遭遇することを意味します
したがって、二重引用符で囲まれた文字列内の文字列の一部として二重引用符を直接表示したい場合は機能せず、少し人為的な処理が必要になります。一重引用符で囲まれた文字列 文字列の一部として一重引用符を表示することもできません。
要件を達成するには 2 つの方法があります
方法 1
プログラム内で、文字列の両端に一重引用符があり、一重引用符の中に二重引用符が含まれている場合、二重引用符はプログラムによって文字列全体に文字として格納され、以下に示す正方形のコードのように、認識プロセス全体を事前に終了するターミネータとして使用しないでください。
text = '双引号的表现符号是: " '
print(text)
# 输出:
# 双引号的表现符号是: "
プログラム内で文字列の両端にダブルクォーテーションがある場合、ダブルクォーテーションの中にシングルクォーテーションがあると、プログラムはそのシングルクォーテーションを文字として文字列全体に格納します。次のように、認識プロセス全体を事前に終了するターミネータとしては使用されません。次のような正方形のコードが示されています。
text = "单引号的表现符号是: ' "
print(text)
# 输出:
# 单引号的表现符号是: '
方法 2
Python はバックスラッシュをエスケープ文字\
として使用します 。プログラムによって認識されるいくつかのキー文字が文字列に出現する場合、それらを通常の文字として文字列に格納するだけの場合は、それらを識別するためのエスケープ文字が必要です。次のコードに示すように、その特別な意味
text = "双引号的表现符号是:\" ,单引号的表现符号是:' "
print(text)
# 输出:
# 双引号的表现符号是:" ,单引号的表现符号是:'
出力からわかるように、文字列内の二重引用符の前のバックスラッシュが消えますが、同時に、二重引用符で囲まれた文字列内に二重引用符が表示され、エラーは報告されず、プログラムは正常に実行されます。バックスラッシュは、終端文字としての二重引用符の特別な意味をエスケープすることを説明します。
通常、文字列に二重引用符と一重引用符の両方が必要な場合。二重引用符や一重引用符ですべてを表示できない場合は、エスケープ文字を使用して対応する情報をエスケープできます。
それが文字列であることを確認する方法
Python では、次のコードに示すように、組み込み関数を通じてデータの型情報を取得できます。type()
print(type("Hello World"))
# 输出:
# <class: 'str'>
取得した出力を印刷すると、文字がtype()
出力されていることがわかります。山括弧内のクラスは、これがクラスであることを意味し、str は、これが文字列型であることを意味します。<class: 'str'>
前に紹介したように、英語の String の略語 str は、Python で文字列型を表すために使用されます。
文字列演算子
オペレーター | 説明 | 例 |
---|---|---|
+ | 文字列の連結 | >>> 「Hello」+「World」 HelloWorld |
* | 文字列の複数出力 | >>>「こんにちは」 ※2 ハローハロー |
[] | 文字列内の文字インデックスの最初の桁は、 0 から始まるインデックスによって取得されます。 |
>>> 「こんにちは」[2] l |
[s:e] | インデックス s の文字からインデックス e の文字までの文字列のセクションを末尾の前でインターセプトします。 |
>>> 「こんにちは」[1:4] エル |
の | 指定された文字が文字列に含まれている場合、メンバーシップ演算子はTrue を返します。 |
>>> 「Hello」の「H」 True |
ありませんで | メンバーシップ演算子は、 文字列に指定された文字が含まれていない場合は True を返し、それ以外の場合は False を返します。 |
>>> 「Hello」に「H」が入っていない False |
% | フォーマット文字列。文字の結合によく使用されます。 | >>> “Hello %s” % “World” Hello World |
文字列の使用法
エスケープ文字
冒頭で、文字列には特別な意味を持つさまざまな文字が含まれる可能性があり、\
エスケープ文字のバックスラッシュを使用して正しく表示する必要があると述べました。次にエスケープ文字とはどの文字なのか、またその使い方を紹介します。
エスケープ文字 | 説明 |
---|---|
\(行尾) | 継続文字 |
\ (列をなして) | バックスラッシュエスケープ |
\b | バックスペース |
\n | 改行 |
\v | 垂直タブ |
\t | 水平タブ |
\r | キャリッジリターン |
\f | ページを変更する |
\0yy | 8 進数の yy は 0 ~ 7 の文字を表します。たとえば、\012 は改行を表します。 |
\xyy | 16 進数、yy で表される文字。例: \x0a は改行を表します。 |
継続文字
スクリプトを作成するとき、文字列が長すぎて画面にテキスト行全体を完全に表示できない場合があるため、読みやすくするために行を折り返す必要があります。継続文字を使用して、異なる行の内容を連結し、完全な内容として出力します。以下のコードに示すように
text = "你是柴米油盐," \
"清晨白米稀饭," \
"你懂得四季变换," \
"懂得长久为伴"
print(text)
# 输出:
# 你是柴米油盐,清晨白米稀饭,你懂得四季变换,懂得长久为伴
バックスラッシュエスケープ
文字列編集ではいくつかの特殊文字が登場しますが、Python はそれらを特殊関数として認識します。文字列内に元の文字を表示したい場合は、バックスラッシュを使用してエスケープする必要があります。以下のコードに示すように
text = "双引号的表现符号是:\" ,单引号的表现符号是:' "
print(text)
# 输出:
# 双引号的表现符号是:" ,单引号的表现符号是:'
バックスペース
バックスペースはその名のとおり、1 つ前のスペースに戻ることですが、文字列にバックスペース文字が含まれると、バックスペース文字より前の文字が消えて表示されなくなります。以下のコードに示すように
text1 = "h\bour"
print(text1)
# 输出:
# our
text2 = "我不\b\b喜欢你"
print(text2)
# 输出:
# 我喜欢你
\b
文字列の元の意味を完全に変更できることがわかります。しかし、ここで非常に奇妙な現象が発生します。1文字をtext1
入力して\b
前にバックスペースするのに、text2
そのうちの 2 文字は\b
1 文字しかバックスペースしません。
これは、英語と中国語の占有バイト数の違いによるもので、英語の文字は 1 バイトしか占有しませんが、中国語はエンコードに応じて 2 ~ 3 バイトを占有します。
改行
スクリプト内の文字列を編集すると、文字出力の形式も豊富になりますが、その中でも改行は非常に重要な形式です。Python では改行文字の記号としてエスケープ文字が提供されており、\n
文字列に\n
改行文字を追加することで改行文字を出力する機能を実装できます。以下のコードに示すように
text = "故事的小黄花,从出生那年就飘着\n童年的荡秋千,随记忆一直晃到现在"
print(text)
# 输出:
# 故事的小黄花,从出生那年就飘着
# 童年的荡秋千,随记忆一直晃到现在
他の
エスケープ文字の使用を Python コンソールに直接出力して、自分のアイデアを確認することができます。残りのエスケープ文字はあまり使用されないため、ここではスペースを無駄にしません。誰でも試してみることができます
三重引用符
Python で文字列を作成するために使用できる一重引用符と二重引用符に加えて、文字列の作成に使用できる三重引用符 ("""
または) もあります。'''
これを個別にリストしてここで紹介する理由は、複雑な文字列を処理して割り当てることができるためであり、エスケープ文字の役割を理解することが、ここでのその威力を理解するのに役立つからです。
三重引用符の形式は、文字列の両側を囲む 3 つの連続する二重引用符または一重引用符です。以下のコードに示すように
text = """故事的小黄花 从出生那年就飘着
童年的荡秋千 随记忆一直晃到现在
re sol sol xi do xi la sol la
xi xi xi xi la xi la sol
"""
print(text)
# 输出:
# 故事的小黄花 从出生那年就飘着
# 童年的荡秋千 随记忆一直晃到现在
# re sol sol xi do xi la sol la
# xi xi xi xi la xi la sol
三重引用符を使用すると、文字列が複数行にまたがって直接存在できるようになり、文字列に自動的に改行が挿入されることがわかります。これにより、文字列を自由に編集でき、さまざまな引用符や特殊文字の悪夢のような泥沼から解放されます (引用符のバックスラッシュ エスケープについて考える必要がなく、改行を表すために毎回 \n を追加する必要もありません)。
文字列の連結
フォーマットコード
上で述べたように、Python は文字列内でできるだけ多くの形式を出力できるように、多くのエスケープ文字を提供します. ここでは、文字列をより柔軟に編集できるようにするために、文字列にさらに多くの記号を追加する方法を紹介します。その書式設定構文を以下のコードに示します。
singer_list = ["周杰伦", "林俊杰", "许嵩"]
for signer in singer_list:
text = "%s是我喜欢的歌手之一" % signer
# 输出:
# 周杰伦是我喜欢的歌手之一
# 林俊杰是我喜欢的歌手之一
# 许嵩是我喜欢的歌手之一
上記のコードでは、ループを使用してリストを走査し、リスト内のすべての歌手を取り出して文字列に動的に挿入し、文字列の内容を動的に変更するプロセスを実現しています。
for signer in signer_list:
ループをまだ理解していない初心者は、なぜ上記のコードがこのように書かれているかを気にする必要はありません。理解する必要があるのは、ループ内で 3 人の歌手を取り出す操作を実現しており、各ループにsigner
歌手の値が割り当てられていることだけです。
次の表は、Python が提供できるいくつかの書式設定記号です。
シンボル | 説明 |
---|---|
%c | 文字と ASCII コードの書式設定 |
%s | フォーマット文字列 |
%d | 整数のフォーマット |
%u | 符号なし整数のフォーマット |
%o | 符号なし 8 進数のフォーマットを設定する |
%バツ | 符号なし 16 進数の形式を設定する |
%バツ | 形式 符号なし 16 進数 (大文字) |
%f | 浮動小数点数の書式設定。小数点以下の精度を指定できます。 |
%e | 浮動小数点数を科学的表記法でフォーマットする |
%g | %f および %e の省略形 |
%p | 変数のアドレスを 16 進数でフォーマットします |
以下に、初心者にも理解しやすいいくつかの一般的な使用法を紹介します。
フォーマット記号: %s
%s
是格式化字符串的,当我们需要动态的的给字符串中插入一些其他字符时,我们可以使用%s
来实现我们的需求。如下方代码所示
variable = "苹果"
text = "牛顿被%s砸中,所以发现了万有引力" % variable
print(text)
# 输出:
# 牛顿被苹果砸中,所以发现了万有引力
上述代码我们将苹果
赋值给了变量variable
,并且使用变量来动态插入到字符串中,从而输出了一串完整的句子。实际生产环境使用中,variable可能是任意值,我们身为脚本的编写者也不知道用户会输入什么值。但是无论输入的事什么值,都能够通过赋值给这个变量然后动态插入字符串中并输出
格式符号:%d
上面表格中描述写%d
是格式化整数的,根据上面%s
的用法我们可以知道,当字符串中出现%d
时,我们就可以通过字符串后面加百分号%
再加一个整数,即可实现往字符串中动态插入数字的操作。如下方代码所示
point = 99
text = "小明今天考试得了%d分,非常开心" % point
print(text)
# 输出:
# 小明今天考试得了99分,非常开心
格式符号:%f
与%d
格式化整数相对,%f
是用来格式化浮点数的,浮点数通常指小数。我们可以通过%a.bf
来指定展示小数的长度,保留的精度。如果长度不够,则左侧补空格。如下方代码所示
pi = 3.14
text = "π的数值大概是%f" % pi
print(text)
# 输出:
π的数值大概是3.140000
pi = 3.1415926
text = "π的数值大概是%f" % pi
print(text)
# 输出:
π的数值大概是3.141593
pi = 3.1415926
text = "π的数值大概是10.3f" % pi
print(text)
# 输出:
π的数值大概是 3.142
可以看到当我们仅使用%f
时,无论我们的浮点数
多长,都会固定将数值截断至小数点第六位,若不足六位则会用0补上。而我们可以通过%a.bf
的方式来指定我们需要保留多少长度和多少位小数的精度,a
代表长度,b
代表精度,当我们浮点数的长度不够时,左侧补上了缺少长度数目的空格
字符串的加法
字符串可以通过符号加号+
来拼接多个字符串,如下方代码所示
text1 = "Hello"
text2 = "Kitty"
text = text1 + text2
print(text)
# 输出:
# HelloKitty
字符串的倍化
字符串可以通过符号星号*
来倍数字符串,如下方代码所示
text = "Hello" * 3
print(text)
# 输出:
# HelloHelloHello
字符串的内置函数拼接法
除了上述的拼接字符串的方法外,字符串还提供了一种内置函数format()
方便我们动态往字符串中插入我们想要拼接的字符。如下方代码所示
text = "{}是我最喜欢吃的{}之一".format("苹果", "水果")
print(text)
# 输出:
# 苹果是我最喜欢吃的水果之一
可以看到我们在字符串中加入了两个花括号,而在字符串的结束处加入了.format("苹果", "水果")
就令苹果
和水果
两个词汇插入到了花括号所在的地方。
我们只需要在字符串中加入花括号,然后在format的括号内加入对应想要插入的字符串即可将其动态插入上去。加了多少花括号就需要在format的括号内加入多少字符串并用逗号隔开
字符串内置函数
本节将讲解字符串具体有哪些常用内置函数,它们有什么作用。
方法 | 描述 |
---|---|
string.count(str, beg=0, end=len(string)) | 返回str在string里面出现的次数,如果beg或者end指定,则返回string指定范围内str出现的次数 |
string.decode(encoding=“UTF8”, errors=“strict”) | 以encoding指定的编码格式解码string,如果出错则报一个ValueError的异常,除非errors指定的是ignore 或者replace |
string.encode(encoding=“UTF8”, errors=“strict”) | 以encoding指定的编码格式编码string,如果出错则报一个ValueError的异常,除非errors指定的是ignore 或者replace |
string.find(str, beg=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
string.format() | 格式化字符串 |
string.index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在 string中会报一个异常 |