Pythonで扱う数値型、文字列型、リスト型について勉強します。
3.1 Pythonを電卓として使う
3.1.1. 数
算数で使用する演算子について、Pythonでは以下のように表現します。
演算子 | 演算 | Input | Output |
---|---|---|---|
+ | 和 | 1 + 2 | 3 |
– | 差 | 5 – 3 | 2 |
* | 積 | 5 * 4 | 20 |
/ | 商 | 17 / 3 | 5.666666666666667 |
// | 商(少数切捨て) | 17 / 3 | 5 |
% | 余り | 17 / 3 | 2 |
** | 累乗 | 2**3 | 8 |
整数はint型、小数部を持つ数はFloat型です。
数値型の種類については、別の機会にで学びます。
変数に数値を代入することで、変数でも演算子が使用可能です。
例えば、BMI(体重 [kg] / 身長 [m]^2)を計算してみます。
weight = 78 length = 1.75 BMI = weight / length**2 print(BMI)
25.46938775510204
3.1.2. 文字列型(string)
文字列として扱う場合は、単一引用符/シングルコーテーション(’…’)もしくは二重引用符/ダブルコーテーション(”…”)で囲みます。
コーディング規約(PEP8)では、どちらかを推奨しているわけではなく、プロジェクトごとに統一するようポリシーを決めるべき、としています。
注意として、数字を扱う場合、それが数値型なのか文字列型なのかを意識する必要があります。
print(1234, type(1234)) print('1234', type('1234'))
1234 <class 'int'> 1234 <class 'str'>
Pythonもほかのプログラミング言語と同様、特殊文字が存在します。
特殊文字を表現する場合にエスケープシーケンス(\)を使用します。
ごく一部ですが、以下に示します。
エスケープシーケンス | 意味 |
---|---|
\\ | バックスラッシュ(\) |
\a | ベル |
\n | 改行 |
\r | キャリッジリターン |
\t | 水平タブ |
\v | 垂直タブ |
print('C:\some\name')
C:\some ame
“\n”が改行と認識されてしまっています。
エスケープシーケンスを使ってみます。
print('C:\some\\name')
C:\some\name
エスケープシーケンスを使わない、他の方法としてraw string(最初の引用符の前にrを付ける)が使えます。
print(r'C:\some\name')
C:\some\name
そのほかに、複数行にまたがって文字列リテラルを書く1つの方法として、三連引用符(“””…””” や ”’…”’) があります。
改行文字は自動で認識されますが、行末に\を入れることで、無視させることも可能です。
print(''' 1行目 2行目\ <-ここの改行は無視 3行目''')
1行目 2行目<-ここの改行は無視 3行目
文字列同士の演算(+で結合、*で反復)も可能です。
3 * 'un' + 'ium'
'unununium'
文字リテラル(引用符で囲われた文字列)を並べるだけでも結合されます。
この機能は、ソースコードで長文を書くとき(※)に役に立ちます。
※コーディング規約(PEP8)によると、1行の長さはし最大79文字とすることを推奨されています。
これは、エディタによる自動折り返し機能による、見た目が崩れることを防ぐためのようです。
text = ('Put several strings within parentheses ' 'to have them joined together.')
'Put several strings within parentheses to have them joined together.'
文字列のindexを指定して、一部を取り出してくれる仕組みがあります。
indexは0から数えます。また、正の値だけでなく負の値も指定できます。
ex ) 文字列リテラル[index]
word = 'Python' print('index 0 =', word[0]) print('index 1 =', word[1]) print('index -1 =', word[-1]) print('index -2 =', word[-2])
index 0 = P index 1 = y index -1 = n index -2 = o
リストはndex指定だけでなく、スライスもサポートしているので、任意の範囲で文字列を取り出すことも可能です。
ex) 文字リテラル[start:end:step]
※startを指定しない場合は先頭から、endをしてしない場合は最後まで、stepを指定しない場合は文字ずつ文字列を取り出します。
print('index 0~2 =', word[0:2]) print('index ~2 =', word[:2]) print('index 2~5 =', word[2:5]) print('index 2~ =', word[2:])
index 0~2 = Py index ~2 = Py index 2~5 = tho index 2~ = thon
word[2:5]の場合、index:5の”n”が含まれませんので、要注意です。
Pythonチュートリアルにも記載がありますが、以下の通り理解するとよいです。
テキストエディタ等で文字を打つ場合のカーソルをイメージする感じです。
word[2:5]を指定した場合、2~5の間にある文字列(tho)が指定されたことになります。
+—+—+—+—+—+—+
| P | y | t | h | o | n |
+—+—+—+—+—+—+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
組み込み関数len()を使えば、文字列の長さを返すことができます。
s = 'supercalifragilisticexpialidocious' len(s)
34
3.1.3. リスト型(list)
Pythonでは様々なデータ型が存在します。それぞれが特徴を持っており、最も汎用性が高いlist型について紹介します。
リスト型は、コンマ区切りの値(要素)の並びを角括弧で囲んだもので表現されます。
ex) [arg1, arg2, arg3, …]
文字列同様、indexで要素を取り出したり、スライスをサポートしています。
squares = [1, 4, 9, 16, 25] print(squares[0]) print(squares[-1]) print(squares[-3:])
1 25 [9, 16, 25]
全要素を指定するスライス”[:]”は、全要素を含む新しいリストを返します。つまりは浅いコピーを返します。(浅いコピー、深いコピーについては別で解説していますので、こちらを参照)
リストは連結したり、要素を入れ替えたりいろんな操作が可能です。
■リストの連結
squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
■要素の入れ替え
cubes = [1, 8, 27, 65, 125] # 4^3=64が正しいので、65→64に入れ替えます。 cubes[3] = 64 print(cubes)
[1, 8, 27, 64, 125]
要素の入れ替えではスライスでも指定可能です。
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] letters[2:5] = ['C', 'D', 'E'] print(letters)
['a', 'b', 'C', 'D', 'E', 'f', 'g']
■要素の数を数える
リストに対して、組み込み関数len()を使うと、要素の数を返します。
len(letters)
7
■リストの入れ子
リストの入れ子とは、リストを含むリストです。
ex) [[arg11, arg12, arg13], [arg21, arg22, arg23]]
arg22にアクセスしたい場合、以下の通りの表記となります。
my_list = [[arg11, arg12, arg13], [arg21, arg22, arg23]] print(mylist[1]) print(mylist[1][1])
[arg21, arg22, arg23] arg22
3.2 プログラミングへの第一歩
ここまではプログラミンで行う簡単な処理について紹介しました。
もう少し勉強すると、もうちょっと複雑な課題にもPythonを使って解決することができます。
例えば、黄金比でおなじみのFibonacci数列を算出することともできます。
a, b = 0, 1 while a < 1000: print(a, end=',') a, b = b, a+b
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987
上記ではいろんな機能を使っています。
これらの機能については、チュートリアルを進めていくと、だんだんと理解できるようになります。