今回はpython基本知識を紹介します。
Pythonのインストール
pythonをインストールするのは環境により、違いますが、今回はwindowsでzip方式のインストールを紹介します。
zipファイルダウンロード
公式サイトよりWindows用Pythonのzipファイルをダウンロードする。
インストール
①好きな場所に解凍する。
②環境変数のPATHに展開したPythonの展開パスを追加する。
コメントの書き方
1行のみのコメント
Pythonで説明をコメントとして記述したり不要なコードをコメントアウトしたりする場合は#を使う。
「ctrl + /」でコメントアウトを追加する。
# first python code
print(“hello world”)
複数行コメント
シングルクォート’、ダブルクォート”を3つつなげたトリプルクォート(”’, “””)で囲むことで複数行の内容をコメントアウトする
変数
Python では変数は値を保管する場所ではなく、値が保管されている場所を指し示すものです。 その為、数値型の値を代入して定義した変数に、あとから別のデータ型の値を格納することもできます。
変数定義
変数名はアルファベットの大文字と小文字は区別される。
変数名 = 値
name = ‘東京’
print(name)
データ型
Pythonでのデータ形で頻繁に利用されている種類は以下の7つです。関数typeで確認できます
type(“abc”)
- 数値 (int型:整数、float型:小数点)
- str型:文字列 (’hello world’)
- bool型:真偽値 (True,False)
- list型:リスト([1 , 2, 3, 5])
- tuple型:タプル((1 , 2, 3, 5))
- set型:集合型 ({10, 20, 30})
- dict型:辞書 ({‘name’: ‘test’, ‘age’: 30})
print()関数
print関数は、文字列を画面に出力する関数です。print関数の基本的な構文は以下のようになります。
print(‘出力したい文字列’)
name = ‘SaTo’
age = 30
weight = 108.5
print(‘今年は%d歳’ % age)
print(‘名前は%sです’ % name)
print(‘体重は%.2fです’ % weight)
no = 30;
print(‘番号は%07dです’ % no) #学生番号は0000030です
print(‘名前は%s,年齢は%d’ % (name, age)) #名前はSaTo,年齢は30
オプション引数(end)
printで文字を出力するには、printの引数部分に出力したい文字列を置きます。printでは文字の末尾に改行が追加されるので、出力した文字列が自動的に改行されます。改行をしたくない場合はendオプションを用いて末尾に何も付加しないようにします。デフォルトはend=”\n”となっている
#文字列変数
text_a = ‘基本知識をべんきょうするか’
print(text_a) #基本知識をべんきょうするか
print(text_a, end=”?”) #基本知識をべんきょうするか?
エスケープシーケンス
文字列の中に改行を表す文字を入力したい場合、特殊な文字を表すのに使用するのがエスケープシーケンスです。
\ と文字の組み合わせでエスケープシーケンスを表します
エスケープシーケンス |
意味 |
\newline |
文字列を途中で改行する |
\\ |
バックスラッシュ (\) |
\’ |
一重引用符 (‘) |
\” |
二重引用符 (“) |
\n |
ASCII 行送り (LF) |
\t |
ASCII 水平タブ (TAB) |
使用例:
print(‘hello\nPython’)
format関数
Python2.6以上から使うことができる新しい方式が、format関数を使って文字列と変数を出力する方法です。format関数の書式は以下の通りです。
print(‘任意の文字列{0}任意の文字列’.format(変数)
複数の引数を与える
‘{0}, {1}, {2}…’.format(変数1, 変数2, 変数3….) #インデックス(添え字)で指定
‘{h1}, {h2},{h3}..’.format(h1=変数1, h2=変数2, h3=変数…) #キーワード引数で指定
‘{h1},{h2},{h3}…’.format(**{‘h1’:変数1, ‘h2’:変数2, ‘h3’:変数3….} ) #辞書で指定
リストやタプルを埋め込む
‘{0[添え字]}, {0[添え字]}, {1[添え字]}, {1[添え字]}…’.format(リスト1, リスト2….)
{0[添え字]}の左側の数字が{}に埋め込みたい変数(この場合リストやタプル)がformat関数の何番目の引数かを表していて、[添え字]がその変数の中で表示したい要素のインデックスになっています。
f文字列
Python3.6にf文字列フォーマットを追加されました。
name = ‘SaTo’
age = 30
print(f’名前は{name},年齢は{age}’)
input関数
input() 関数を使うと、キーボードを使って、文字列データを入力できます。
name = input(‘please input your name:’)
print(f’入力したname:{name}’)
データ型変換
型変換とは、その名のとおりデータ型を指定した型に変換することです。
変換関数 |
説明 |
int(x[,base]) |
xを整数に変換 |
float(x) |
xを小数に変換 |
str(x) |
xを文字列に変換 |
eval(str) |
pythonコードとして計算、オブジェクトを返す(本来のデータの) |
tuple(s) |
sをタプルに変換 |
list(s) |
sをリストに変換 |
使用例:
age = input(‘please input your age:’)
int_age = int(age)
print(type(int_age))
演算子
代数演算子
+a # 正数
-a # 負数
a + b # 加算
a – b # 減算
a * b # 乗算
a / b # 除算
a % b # a を b で割った余り
a ** b # a の b 乗
a // b # 切り捨て除算
ビット演算子
~a # ビット反転
a & b # AND:論理積(aもbも1のビットが1)
a | b # OR:論理和(aまたはbが1のビットが1)
a ^ b # XOR:排他的論理和(aまたはbが1のビットが1)
a << b # b ビット左シフト
a >> b # b ビット右シフト
代入演算子
a = b # a に b を代入する
a = b = 10 # a=10,b=10に同じ
num1, float1, str1 = 10, 0.5, ‘hello’ # num1=10,float1=0.5,str1=’hello’ に同じ
a += b # a = a + b に同じ
a -= b # a = a – b に同じ
a *= b # a = a * b に同じ
a /= b # a = a / b に同じ
a %= b # a = a % b に同じ
a **= b # a = a ** b に同じ
a //= b # a = a // b に同じ
a &= b # a = a & b に同じ
a |= b # a = a | b に同じ
a ^= b # a = a ^ b に同じ
a <<= b # a = a << b に同じ
a >>= b # a = a >> b に同じ
比較演算子
a == b # a が b と等しい
a != b # a が b と異なる
a < b # a が b よりも小さい
a > b # a が b よりも大きい
a <= b # a が b 以下である
a >= b # a が b 以上である
a is b # a が b と等しい
a is not b # a が b と異なる
a in b # a が b に含まれる (a, b は共に文字列、または、b はリストやタプル)
a not in b # a が b に含まれない (a, b は共に文字列、または、b はリストやタプル)
ブール演算子
x and y # x も y も真であれば真
x or y # x または y が真であれば真
not x # x が偽であれば真
条件分岐
if文
if 条件式1:
条件式1がTrueのときに行う処理
条件式1がTrueのときに行う処理
elif 条件式2:
条件式1がFalseで条件式2がTrueのときに行う処理
elif 条件式3:
条件式1, 2がFalseで条件式3がTrueのときに行う処理
…
else:
すべての条件式がFalseのときに行う処理
使用例:
age = 9
if age < 20:
print(“<20”)
elif 20 <= age < 60:
print(“<60”)
else:
print(“other”)
while文
while 条件式:
条件式がTrueのときに行う処理
使用例:
x = 1
while x <= 10:
print(x)
x += 1
while文のbreak
pythonのwhile文にはbreak,continueが使えます。
break:繰り返し処理を強制終了させる
while文のcontinue
continue:その週の処理だけをスキップする
while文のelse
while count<5:
if count ==1:
break
print(count)
count+=1
else:
print(‘breakで抜けた場合は実行されない’)
for文
for 繰り返し変数 in オブジェクトの集合:
繰り返し処理内容
使用例:
list=[1,2,3,4,5]
for element in list:
print(element)
for文のbreak
pythonのfor文にはbreak,continueが使えます。
break:繰り返し処理を強制終了させる
for文のcontinue
continue:その週の処理だけをスキップする
for文のelse
str = ‘test’
for i in str:
if i == ‘s’:
print(‘sが存在します’)
break
print(i)
else:
print(‘breakで抜けた場合は実行されない’)
指定回数繰り返し
特定の回数分繰り返し処理を行いたい場合、range関数を使う方法がある。
for i in range(10):
print(i)
乱数生成
Python標準ライブラリのrandomモジュールの関数random()やuniform(), randrange(), randint()などを使うと、乱数(ランダムな浮動小数点数floatや整数int)を生成できる。
random.random()(0.0以上1.0未満の浮動小数点数)
random.uniform()(任意の範囲の浮動小数点数)
random.randrange()(任意の範囲・ステップの整数)
random.randint()(任意の範囲の整数)
使用例:
import random
print(random.random()) # 0.10719278839344926
print(random.uniform(100, 500)) #496.6584713276877
print(random.randrange(10)) #6
print(random.randrange(10, 20, 2)) #14
print(random.randint(10, 50)) #42
三項演算子
(変数) = (条件がTrueのときの値) if (条件) else (条件がFalseのときの値)
例:
x = “OK” if n == 10 else “NG”
文字列
文字列演算
a + b # 文字列 a と 文字列 b を連結します
a * n # 文字列 a を n 回繰り返します
a[n] # 文字列 a の中の n 番目の文字を取り出します
a[n:m] # 文字列 a の中の n 番目から m 番目までの文字列を取り出します
a[n:] # 文字列 a の中の n 番目から最後までの文字列を取り出します
a[:m] # 文字列 a の中の 0 番目から m 番目までの文字列を取り出します
a[n:m:s] # 文字列 a の中の n 番目から m 番目までの文字列を s個とばしで取り出します
使用例:
str = ‘0123456789’
print(str[:7]) # 0123456
print(str[2:]) # 23456789
print(str[:]) # 0123456789
print(str[1:7]) # 123456
print(str[1:7:1]) # 123456
print(str[1:7:2]) # 135
print(str[::-1]) # 9876543210
文字列検索
findメソッド(rfind)
文字列の先頭から検索したい文字列を探し、最初に見つかった位置(0から始まるインデックス)を返す。
見つからなかった場合は−1を返す
s.find(検索したい文字列,開始インデックス,終了インデックス)
使用例:
str = ‘This is a test string.’
#文字列先頭から末尾までで’test’を検索
print(str.find(‘test’)) # =>10
#文字列’This is’から’test’を検索
print(str.find(‘test’, 0, 6)) # =>-1
indexメソッド(rindex)
find()と同様の動作するが、見つからなかった場合「ValueError」という例外が発生する。
str.index(検索したい文字列,開始インデックス,終了インデックス)
str = ‘This is a test string.’
#文字列先頭から末尾までで’test’を検索
print(str.index(‘test’)) # =>10
#文字列’This is’から’new’を検索
print(str.index(‘new’)) # ValueError
countメッソド
文字列が何個含まれているか調べる。文字列が存在しない場合、0が出ます
str.count(検索したい文字列)
str = ‘This is a test string. test’
#文字列先頭から末尾までで’test’を検索
print(str.count(‘test’)) # 2
#文字列’This is’から’new’を検索
print(str.count(‘new’)) # 0
文字列置換
replaceメッソド
文字列の中で特定の文字列を置き換えるときはreplace(リプレース)メソッドを使います。
str.replace(‘文字列1’,‘文字列2’) #文字列1から文字列2へ置換します
str.replace(‘文字列1’,‘文字列2’,置換個数) #文字列1から文字列2へ置換します
str = ‘This is a test string. test’
#文字列先頭から末尾までで’test’を’newTest’に置換
print(str.replace(‘test’, ‘newTest’)) # This is a newTest string. newTest
splitメッソド
文字列を「区切り文字」で区切り、文字列のリストを作って返す。
区切り文字を指定しない場合、スペース・改行等の空白文字が区切り文字となる。
#文字列strを「区切り文字」で区切る。
str.split(区切り文字, 分割文字個数)
str = ‘This is a test string. test’
print(str.split(‘test’)) # [‘This is a ‘, ‘ string. ‘, ”]
print(str.split(‘test’,1)) # [‘This is a ‘, ‘ string. test’]
joinメッソド
シーケンス中の要素を連結した文字列を返す。
#シーケンスを文字列sで分割し連結した文字列を返す。
s.join(シーケンス)
mylist = [‘aa’, ‘bb’, ‘cc’]
new_str = ‘…’.join(mylist)
print(new_str) #aa…bb…cc
capitalizeメッソド
先頭の文字だけ大文字にする
mystr = ‘this is a Test’
new_str = mystr.capitalize()
print(new_str) #This is a test
titleメッソド
単語の先頭文字だけ大文字に変換
mystr = ‘this is a Test’
new_str = mystr.title()
print(new_str) #This Is A Test
upperメッソド
文字列の英字小文字を英字大文字に変換し、その結果を返す。
mystr = ‘this is a Test’
new_str = mystr.upper()
print(new_str) #THIS IS A TEST
lowerメッソド
文字列の英字大文字を英字小文字に変換し、その結果を返す。
mystr = ‘this is a Test’
new_str = mystr.lower()
print(new_str) #this is a test
lstripメソッド
mystr = ‘ this is a Test ‘
new_str = mystr.lstrip()
print(new_str) #’this is a Test ‘
rstripメソッド
mystr = ‘ this is a Test ‘
new_str = mystr.rstrip()
print(new_str) #’ this is a Test’
stripメソッド
mystr = ‘ this is a Test ‘
new_str = mystr.strip()
print(new_str) #’this is a Test’
ljustメソッド(rjust,center)
文字列を幅を考慮して左寄せした結果を返す。文字列の幅が指定した値に満たない場合、指定した文字で埋める(埋め草文字)。埋め草文字を指定しない場合、スペースで埋める。
右寄せを行う場合はrjust(),中央寄せを行う場合はcenter()メソッドがある。
#文字列sの幅を考慮して左寄せする。
str.ljust(幅, 埋め草文字)
mystr = ‘Test’
new_str = mystr.ljust(8,’@’)
print(new_str) #Test@@@@
mystr = ‘Test’
new_str = mystr.center(8,’@’)
print(new_str) #@@Test@@
mystr = ‘Test’
new_str = mystr.rjust(8,’@’)
print(new_str) #@@@@Test
startswithメソッド
文字列が検索したい文字列で始まっている時Trueを返す。そうでない場合、Falthを返す。
開始インデックス/終了インデックスは、指定しなければ文字列の先頭/末尾になる。
#文字列sがある文字列で始まっているか調べる。
str.startswith(検索したい文字列,開始インデックス,終了インデックス)
mystr = ‘this is a test’
print(mystr.startswith(‘this’)) #True
endswithメソッド
文字列が検索したい文字列で終わっている時Trueを返す。そうでない場合、Falthを返す。
開始インデックス/終了インデックスは、指定しなければ文字列の先頭/末尾になる。
#文字列sがある文字列で終わっているか調べる。
str.endswith(検索したい文字列,開始インデックス,終了インデックス)
mystr = ‘this is a test’
print(mystr.endswith(‘test’)) #True
isalphaメソッド
文字列が英文字だけで構成されているか判定
print(‘hello’.isalpha()) #True
print(‘hello world’.isalpha()) #False
print(‘hello123’.isalpha()) #False
isdigitメソッド
文字列が数字だけから構成されているか判定
print(‘111’.isdigit()) #True
print(‘111.11’.isdigit()) #False
print(‘hello world’.isdigit()) #False
print(‘hello123’.isdigit()) #False
isdigit()
True: ユニコード文字・バイト文字・全角文字・ローマ数字
False: 漢数字
Error: なし
isdecimal()
True: ユニコード文字・全角文字
False: ローマ数字・漢数字
Error: バイト文字
isnumeric()
True: ユニコード文字・全角・ローマ数字・漢数字
False: なし
Error: バイト文字
isalnumメソッド
文字列が英文字か数字だけで構成されているか判定
print(‘hello123’.isalnum()) #True
print(‘hello123@’.isalnum()) #False
print(‘hello 123’.isalnum()) #False
isspaceメソッド
文字列がスペースかタブだけで構成されているか判定
print(‘ ‘.isspace()) #True
list型
書き方:
mylist = []
# または
mylist2 = list()
使い方:
name_list = [‘TOM’, ‘Lily’, ‘ROSE’]
print(name_list[0])
検索
indexメソッド
最初に現れる値のindexを調べる。存在しない場合、エラーとなる。
name_list = [‘TOM’, ‘Lily’, ‘ROSE’]
print(name_list.index(‘Lily’)) #1
print(name_list.index(‘Lilys’)) #ValueError
countメソッド
値が何個含まれているか。存在しない場合、0となる
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
print(name_list.count(‘Lily’)) #2
print(name_list.count(‘Lilys’)) #0
lenメソッド
リスト型を引数にすると、その要素の個数を取得できる。
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
print(len(name_list)) #4
in
指定した文字がリストに存在するかチェック
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
print(‘Lilys’ in name_list) #False
print(‘Lily’ in name_list) #True
not in
指定した文字がリストに存在しないかチェック
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
print(‘Lilys’ not in name_list) #True
追加
appendメソッド
リストのメソッドappend()で、末尾(最後)に要素を追加できる。
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
name_list.append(‘Test’)
print(name_list) #[‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’, ‘Test’]
extendメソッド
リストのメソッドextend()で、末尾(最後)に別のリストやタプルを結合できる。すべての要素が元のリストの末尾に追加される。
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
name_list.extend([‘Test’,’GO’])
print(name_list) #[‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’, ‘Test’, ‘GO’]
insertメソッド
リストのメソッドinsert()で、指定した位置に要素を追加(挿入)できる。
list.insert(index, data)
#第一引数に位置、第二引数に挿入する要素を指定する。先頭(最初)は0。負の値の場合、-1が末尾(最後)の一つ前となる。
#最後の2番目に追加
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
name_list.insert(-1, 123)
print(name_list) #[‘TOM’, ‘Lily’, ‘ROSE’, 123, ‘Lily’]
#先頭に追加
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
name_list.insert(0, 123)
print(name_list) #[123, ‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
削除
Pythonでlist型のリスト(配列)の要素を削除するには、リストのメソッドclear(), pop(), remove()を使う。インデックスやスライスで位置・範囲を指定してdel文で削除する方法もある。
del
インデックス・スライスで位置・範囲を指定して削除する
スライスで範囲を指定すると、複数の要素を一括で削除できる。
変数を削除
# 変数を削除name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
del name_list
print(name_list) #NameError: name ‘name_list’ is not defined
位置を指定して削除
# 位置を指定して削除
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
del name_list[0]
print(name_list) #[‘Lily’, ‘ROSE’, ‘Lily’]
範囲を指定して削除
# 範囲を指定して削除
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
del name_list[0:2]
print(name_list) #[‘ROSE’, ‘Lily’]
すべての要素を削除
#すべての要素を削除name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
del name_list[:]
print(name_list) #[]
pop
指定した位置の要素を削除し、値を取得する
リストのメソッドpop()
で、指定した位置の要素を削除し、その要素の値を取得できる。
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
print(name_list.pop(1)) # Lily
print(name_list) #[‘TOM’, ‘ROSE’, ‘Lily’]
負の値を使って末尾(最後)からの位置を指定することもできる。末尾(最後)は-1。
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Go’]
print(name_list.pop(-1)) # Go
print(name_list) #[‘TOM’, ‘Lily’, ‘ROSE’]
remove
指定した値と同じ要素を検索し、最初の要素を削除する
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
name_list.remove(‘Lily’)
print(name_list) #[‘TOM’, ‘ROSE’, ‘Lily’]
clear
すべての要素を削除する
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
name_list.clear()
print(name_list) #[]
変更
# 指定した位置の値を変更するname_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘Lily’]
name_list[0] = ‘new_data’
print(name_list) #[‘new_data’, ‘Lily’, ‘ROSE’, ‘Lily’]
sortメソッド
デフォルトは昇順。降順にソートしたい場合は引数reverseをTrueとする。
# 昇順
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘GO’]
name_list.sort()
print(name_list) #[‘GO’, ‘Lily’, ‘ROSE’, ‘TOM’]
# 降順
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘GO’]
name_list.sort(reverse=True)
print(name_list) #[‘TOM’, ‘ROSE’, ‘Lily’, ‘GO’]
reverseメソッド
元のリストを逆順に並べ替え
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘GO’]
name_list.reverse()
print(name_list) #[‘GO’, ‘ROSE’, ‘Lily’, ‘TOM’]
copyメソッド
新しいリストを作成する
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘GO’]
new_list = name_list.copy()
new_list.pop()
print(new_list) #[‘TOM’, ‘Lily’, ‘ROSE’]
print(name_list) #[‘GO’, ‘Lily’, ‘ROSE’, ‘TOM’]
ループ
whileでループ
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘GO’]
i = 0
while i < len(name_list):
print(name_list[i])
i += 1
forでループ
name_list = [‘TOM’, ‘Lily’, ‘ROSE’, ‘GO’]
for name in name_list:
print(name)
2次元リスト
[
[要素1, 要素2, 要素3],
[要素4, 要素5, 要素6],
…,
]
name_list = [[‘TOM’, ‘Lily’], [‘ROSE’, ‘GO’]]
print(name_list[0][0])
タプル
リストはデータを変更できますが、タプルはデータを変更できない。
タプルの初期化
タプル型は ( から ) までの間に複数の要素をカンマ(,)で区切って定義します。書式は次のとおりです。
(要素1, 要素2, …)
tuple = (1, 2, 3, 4)
print(tuple)
要素が 1 つだけの場合はカンマを付けてください。
(要素1,)
tuple = (1,)
print(tuple)
検索
indexメソッド
最初に現れる値のindexを調べる。存在しない場合、エラーとなる。
tuple = (‘aa’, ‘bb’, ‘cc’, ‘dd’)
print(tuple[0]) #aa
print(tuple.index(‘bb’)) #1
print(tuple.index(‘ee’)) #ValueError
countメソッド
値が何個含まれているか。存在しない場合、0となる
tuple = (‘aa’, ‘bb’, ‘cc’, ‘dd’, ‘cc’)
print(tuple.count(‘bb’)) #1
print(tuple.count(‘cc’)) #2
print(tuple.count(‘ff’)) #0
lenメソッド
要素の個数を取得できる。
tuple = (‘aa’, ‘bb’, ‘cc’, ‘dd’, ‘cc’)
print(len(tuple)) #5
辞書
辞書型は { から } までの間に複数の要素をカンマ(,)で区切って定義します。要素はキーと対応する値の組み合わせを キー:値 の形式で記述します。書式は次のとおりです。
{キー1:値1, キー2:値2, …}
リストやタプルのようなシーケンス型とは異なり辞書はマッピング型なので要素には順序はありません。(ただし Python3.7 からは辞書の順序は要素が挿入された順序であることが保証されるようになりました)。
辞書の初期化
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
print(dict)
空の辞書
dict = {}
または
dict = dict()
検索
keyで検索
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
print(dict[‘name’]) #Tom
print(dict[‘names’]) #KeyError
getメソッド
dict.get(‘key’,デフォルト値)
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
print(dict.get(‘name’, ‘defalut’)) #Tom
print(dict.get(‘names’, ‘defalut’)) #defalut
print(dict.get(‘names’)) #None
keysメソッド
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
print(dict.keys()) #dict_keys([‘name’, ‘age’, ‘gender’])
valuesメソッド
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
print(dict.values()) #dict_values([‘Tom’, 30, ‘1’])
itemsメソッド
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
print(dict.items()) #dict_items([(‘name’, ‘Tom’), (‘age’, 30), (‘gender’, ‘1’)])
追加&変更
辞書[‘key’]=value
# keyが存在しない場合、追加する。
# keyが存在する場合、変更する。
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
dict[‘id’] = 11110
print(dict) #{‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’, ‘id’: 11110}
dict[‘name’] = ‘Rose’
print(dict) #{‘name’: ‘Rose’, ‘age’: 30, ‘gender’: ‘1’, ‘id’: 11110}
削除
delメソッド
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
del dict[‘name’]
print(dict) #{‘age’: 30, ‘gender’: ‘1’}
del dict[‘ages’] #KeyError
clearメソッド
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
dict.clear()
print(dict) #{}
辞書のループ
keyのループ
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
for key in dict.keys():
print(key)
valueのループ
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
for val in dict.values():
print(val)
itemのループ
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
for item in dict.items():
print(item)
dict = {‘name’: ‘Tom’, ‘age’: 30, ‘gender’: ‘1’}
for key, value in dict.items():
print(f'{key}={value}’)
集合
集合は、重複しない要素を順不同で集めたものです。
主に存在判定や重複エントリの排除などで使われます。
初期化
s1 = {10, 20, 30} # 値がある
s2 = set(‘sfsdf’)
s3 = set() #空
検索
in
s1 = {10, 20, 30, 40}
print(10 in s1) #True
not in
s1 = {10, 20, 30, 40}
print(10 not in s1) #False
追加
addメソッド
setの値に引数が追加されます。
s1 = {10, 20}
s1.add(30)
print(s1) #{10, 20, 30}
updateメソッド
setの値にリストが追加されます。
s1 = {10, 20}
s1.update([30, 20, 40])
print(s1) #{40, 10, 20, 30}
削除
removeメソッド
指定した値を削除する。存在しない場合、エラーとなる
s1 = {10, 20, 30, 40}
s1.remove(10)
print(s1) #{40, 20, 30}
s1.remove(10) #KeyError
discardメソッド
指定した値を削除する。存在しない場合、エラーにならない。
s1 = {10, 20, 30, 40}
s1.discard(10)
print(s1) #{40, 20, 30}
s1.discard(10)
popメソッド
一つ値を削除し、削除された値を返す。
s1 = {10, 20, 30, 40}
v1 = s1.pop()
print(s1) #{10, 20, 30}
print(v1) #40
共通内容
+演算子
二つ変数の値を結合する。文字列、リスト、タプルは使えます、辞書は使えない。
文字列の結合
str1 = ‘abc’
str2 = ‘def’
print(str1 + str2) #abcdef
リスト結合
list1 = [1, 10]
list2 = [2, 20]
print(list1 + list2) #[1, 10, 2, 20]
タプル結合
t1 = (1, 10)
t2 = (2, 20)
print(t1 + t2) #(1, 10, 2, 20)
*演算子
指定した値は複数を作成する。文字列、リスト、タプルは使えます、辞書は使えない。
str1 = “-“
list1 = [10]
t1 = (‘test’,)
print(str1 * 10) #———-
print(list1 * 10) #[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
print(t1 * 10) #(‘test’, ‘test’, ‘test’, ‘test’, ‘test’, ‘test’, ‘test’, ‘test’, ‘test’, ‘test’)
in && not in
inは要素が存在するかチェックする。文字列、リスト、タプル、辞書は使えます。
not in は要素が存在しないかチェックする。文字列、リスト、タプル、辞書は使えます。
str1 = “abcde”
list1 = [10, 20, 30]
t1 = (‘test’,’hello’, ‘tom’)
dict1 = {‘name’:’tome’, ‘age’:30, ‘address’:’tokyo’}
print(‘a’ in str1) #True
print(‘a’ not in str1) #False
print(20 in list1) #True
print(20 not in list1) #False
print(‘tom’ in t1) #True
print(‘tom’ not in t1) #False
print(‘age’ in dict1) #True
print(‘age’ not in dict1) #False
関数
len
要素の個数を取得する。文字列、リスト、タプル、集合、辞書が使えます。
str1 = “abcde”
list1 = [10, 20, 30]
t1 = (‘test’,’hello’, ‘tom’)
s1 = {10, 20, 23, 4}
dict1 = {‘name’:’tome’, ‘age’:30, ‘address’:’tokyo’}
print(len(str1)) #5
print(len(list1)) #3
print(len(t1)) #3
print(len(s1)) #4
print(len(dict1)) #3
del またはdel()
要素を削除する。文字列、リスト、タプル、集合、辞書が使えます。
str1 = “abcde”
list1 = [10, 20, 30]
t1 = (‘test’,’hello’, ‘tom’)
s1 = {10, 20, 23, 4}
dict1 = {‘name’:’tome’, ‘age’:30, ‘address’:’tokyo’}
del str1
print(str1) #NameError
del(list1)
print(list1) #NameError
del(list1[2])
print(list1) #[10, 20]
max、min
maxは最大の要素を取得する。
minは最小の要素を取得する。
str1 = “abcde”
list1 = [10, 20, 30]
t1 = (‘test’,’hello’, ‘tom’)
s1 = {10, 20, 23, 4}
dict1 = {‘name’:’tome’, ‘age’:30, ‘address’:’tokyo’}
print(max(str1)) #e
print(max(list1)) #30
print(min(str1)) #a
print(min(list1)) #10
print(max(t1)) #tom
print(min(t1)) #hello
range(start,end,step)
startからendまでの数値を生成する。endを含まない。
start,stepを省略できる。
例: range(10) 1~9の値を生成する
for i in range(1, 10, 1):
print(i)
1
2
3
4
5
6
7
8
9
enumerate()
Pythonのenumerate()関数を使うと、forループの中でリストやタプルなどのイテラブルオブジェクトの要素と同時にインデックス番号(カウント、順番)を取得できる。
enumerate(対象,start=0)
list1 = [10, 20, 30]
for index, value in enumerate(list1):
print(f'{index}={value}’)
結果:
0=10
1=20
2=30
list1 = [10, 20, 30]
for index, value in enumerate(list1,start=2):
print(f'{index}={value}’)
結果:
2=10
3=20
4=30
tuple()
リスト、集合からタプルに変換する
list1 = [10, 20, 30]
s1 = {100, 200, 300}
t1 = (‘a’,’b’,’c’)
print(tuple(list1)) #(10, 20, 30)
print(tuple(s1)) #(200, 100, 300)
list()
タプル、集合からリストに変換する。
list1 = [10, 20, 30]
s1 = {100, 200, 300}
t1 = (‘a’,’b’,’c’)
print(list(s1)) #[200, 100, 300]
print(list(t1)) #[‘a’, ‘b’, ‘c’]
set()
リスト、タプルから集合に変換する
list1 = [10, 20, 30]
s1 = {100, 200, 300}
t1 = (‘a’,’b’,’c’)
print(set(list1)) #{10, 20, 30}
print(set(t1)) #{‘a’, ‘b’, ‘c’}
内包表記
リスト内包表記
リスト内包表記では新たなリストが生成される。
list1 = [i for i in range(10)]
print(list1) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
条件を満たす要素を削除する、という処理は、条件を満たさない要素を残す(抽出する)、という処理に等しい。このような処理にはリスト内包表記を利用する。
list1 = [i for i in range(10) if i %2 == 0]
print(list1) #[0, 2, 4, 6, 8]
list1 = [ (i,j) for i in range(3) for j in range(3)]
print(list1) #(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
辞書内包表記
dict1 = {i: i**2 for i in range(1,5)}
print(dict1) #{1: 1, 2: 4, 3: 9, 4: 16}
二つリストを結合し、辞書に変換
list1 = [‘name’, ‘age’]
list2 = [‘tom’, 29]
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1) #{‘name’: ‘tom’, ‘age’: 29}
辞書から指定した条件のデータを取得
fruits = {‘apple’: 120, ‘Strawberry’: 300, ‘avocado’: 200, ‘orange’: 500}
dict1 = {key: value for key, value in fruits.items() if value >= 300}
print(dict1) #{‘Strawberry’: 300, ‘orange’: 500}
集合内包表記
list1 = [2, 8, 10]
set1 = {i**2 for i in list1}
print(set1) #{64, 100, 4}
関数
関数定義
ユーザーが定義する関数は、次のように定義します。
def 関数名(引数1, 引数2, …):
“””
関数の説明
:param 引数1: 説明1
:param 引数2: 説明2
:return: 戻り値
“””
関数内で実行する処理
return 戻り値
引数が 0 個の場合
def 関数名():
関数内で実行する処理
return 戻り値
関数に関数を実行
def 関数名():
関数内で実行する処理
関数名2()
return 戻り値
関数実行
関数名(引数)
変数のスコープ(globalキーワード)
a = 100
def test():
print(a)
def testB():
a = 200
print(a)
test() #100
testB() #200
print(a) #100 aの値を変更されない
a = 100
def test():
print(a)
def testB():
global a
a = 200
print(a)
test() #100
testB() #200
print(a) #200 global キーワードを使ったら、変更されます。
引数
def user_info(name, age,
address=”jp”):
print(f’名前:{name},年齢:{age},住所:{address}’)
user_info(‘Tom’, 39, ‘tokyo’) #名前:Tom,年齢:39,住所:tokyo
user_info(‘Rose’, address=‘CHIBA’, age=20) #名前:Rose,年齢:20,住所:CHIBA
user_info(‘Rose’, age=20) #名前:Rose,年齢:20,住所:jp
可変長引数
def user_info(*args):
print(args)
user_info(‘Tom’, 39) #(‘Tom’, 39)
user_info(‘Rose’) #(‘Rose’,)
キーワード付きの引数を受け取るように関数を定義することもできます。
def user_info(**kwargs):
print(kwargs)
user_info() #{}
user_info(name = ‘Tom’, age =39) #{‘name’: ‘Tom’, ‘age’: 39}
アンパック
タプルのアンパック
def get_num():
return 100, 200
num1, num2 = get_num()
print(num1,num2) #100 200
辞書のアンパック
dict1 = {‘name’: ‘Tom’, ‘age’: 20}
a, b = dict1
print(a) #name
print(b) #age
print(dict1[a]) #Tom
print(dict1[b]) #20
二つ変数の値を交換
a, b = 1, 2
a, b = b, a
print(a) #2
print(b) #1
可変データ型
リスト、辞書、集合は元のデータを変更できる。
整数、小数、文字列、タプルは元のデータを変更できない。
lambda(無名関数)
def文で関数を定義するが、lambda(ラムダ式)で名前を持たない無名関数を作成することもできる。
名前 = lambda 引数, 引数, ...: 式
引数無し
fn2 = lambda:100
print(fn2) #<function <lambda>print(fn2()) #100
引数あり
fn1 = lambda a,b : a+b
print(fn1(10,20)) #30
引数デフォルト値
fn1 = lambda a,b,c=10 : a+b+c
print(fn1(10,20)) #40
可変長引数
fn1 = lambda *args : args
print(fn1(10,20,29)) #(10, 20, 29)
fn1 = lambda **kwargs : kwargs
print(fn1(name=’Tome’,age = 20)) #{‘name’: ‘Tome’, ‘age’: 20}
条件付き
fn1 = lambda a, b : a if a > b else b
print(fn1(10,20)) #20
リストのソート
students = [
{‘name’:’tom’, ‘age’: 20},
{‘name’:’rose’, ‘age’: 19},
{‘name’:’jack’, ‘age’: 22},
]
students.sort(key=lambda x:x[‘age’])
print(students) #[{‘name’: ‘rose’, ‘age’: 19}, {‘name’: ‘tom’, ‘age’: 20}, {‘name’: ‘jack’, ‘age’: 22}]
高階関数
map関数はリストのような複数の要素をもったオブジェクト(これをシーケンスと呼びましたね)と関数を引数として受け取ります。そしてシーケンスの各要素を、受け取った関数に渡して実行してくれます。このように関数を受け取る関数や関数を返す関数を高階関数と呼びます。
map(function, sequence_object)
list1 = [1, 2, 3, 4, 5]
def func(x):
return x * 2
result = map(func, list1)
print(result)
print(list(result)) #[2, 4, 6, 8, 10]
reduce関数
シーケンスのすべての要素をまとめて1つの値に集約します。集約する方法は、引数を2つ受け取る関数を用意します。
関数は最初1番目、2番目の要素を受け取りその集約結果を返します。次にその集約結果を引数1に、3番目の要素を引数2に受け取ります。この繰り返しですべての要素を処理します。
import functools
list1 = [1, 2, 3]
def func(x, y):
return x + y
result = functools.reduce(func, list1)
print(result) # 6 # func(func(1, 2), 3)
filter
シーケンスのすべての要素を関数の引数として実行し、Trueを返却した要素のみから新しいlistを作成する。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(list(result)) # [2, 4, 6, 8]