Pythonを真面目にゆっくり学ぶべく
を参考に学んでいきます*1。
3. Pyの具:リスト、タプル、辞書、集合
3.1 リストとタプル
には文字列以外にタプルとリストの2種類のsequence構造があり、個以上の要素を保有することができる。文字列と異なり、要素の型はまちまちでも良い。また個々の要素はリストおよびタプルを含む任意のオブジェクトで良い。タプルはイミュータブルであり、リストはミュータブルであるという相違がある。
3.2 リスト
リストは要素を順番に管理したいとき、特に順序と内容が変わり得る場合に利用するのがよい。文字列と異なり、リストはミュータブルである。
3.2.1 []またはlist()による作成
######################################################################### ### リスト:0個以上の要素をそれぞれカンマで区切り、全体を角括弧で囲む ### ######################################################################### empty_list = [] weekdays = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] big_birds = ['emu','ostrich','cassowary'] first_names = ['Graham', 'John', 'Terry', 'Terry', 'Michael'] another_list = [] print(another_list)
3.2.2 list()によるリストへの型変換
()関数により他のデータ型をリストに変換する。
###################################### ### 他のデータ型からリスト型に変換 ### ###################################### # 複数列の文字列を文字列リストに変換 print(list('cat')) # タプルをリストに変換 a_tuple = ('ready','fire','aim') print(list(a_tuple)) # split()関数を用いると、何らかのセパレータに基づき文字列を分割しリスト化 birthday = '6/Jan/1952' print(birthday.split('/'))
3.2.3 [offset]を使った要素の取り出し
文字列と同様に、オフセットを指定することでリストから個々の要素を取り出すことができる。
marxes = ['Groucho','Chico','Harpo'] # オフセット指定 print(marxes[0]) print(marxes[1]) print(marxes[2]) print(marxes[-1]) print(marxes[-2]) print(marxes[-3])
3.2.4 リストのリスト
###################### ### リストのリスト ### ###################### ### リストのリスト:リストを要素に持つリスト small_birds = ['hummingbird', 'finch'] extinct_birds = ['dodo', 'passenger pigeon', 'Norwegian Blue'] carol_birds = [3, 'French hens', 2, 'turtledoves'] all_birds = [small_birds, extinct_birds, carol_birds] print(all_birds) print(all_birds[0]) print(all_birds[0][0])
3.2.5 offsetによる要素の書き換え
marxes = ['Groucho','Chico','Harpo'] marxes[2] = 'Wanda' print(marxes)
3.2.6 オフセット範囲を指定したスライス・取り出し
############################## ### オフセット指定での操作 ### ############################## ### 書き換え marxes = ['Groucho','Chico','Harpo'] marxes[2] = 'Wanda' print(marxes) ### print(marxes[0:2]) print(marxes[::2]) # 先頭から1つおきに取り出す print(marxes[::-2]) # 末尾から左に1つおきに取り出す print(marxes[::-1]) # リストを逆順に取り出す
3.2.7 append()を用いた要素追加
########################## ### append(), extend() ### ########################## ### 要素追加 marxes = ['Groucho','Chico','Harpo'] marxes.append('Zeppo') print(marxes) ### extend() marxes = ['Groucho','Chico','Harpo', 'Zeppo'] others = ['Gummo', 'Karl'] # appendだと… marxes.append(others) print(marxes) # extend()または+= marxes = ['Groucho','Chico','Harpo', 'Zeppo'] marxes.extend(others) print(marxes) marxes = ['Groucho','Chico','Harpo', 'Zeppo'] marxes += others print(marxes)
3.2.8 insert()での要素追加
オフセットを指定して要素を追加するには()を用いる。
################ ### insert() ### ################ ### 要素追加 marxes = ['Groucho','Chico','Harpo'] marxes.insert(1, 'Zeppo') marxes.insert(10, 'Karl') # 末尾を超えるオフセットを指定した場合、末尾に追加 print(marxes)
3.2.9 del, remove(), pop()による要素削除
################################# ### insert(), remove(), pop() ### ################################# ### 要素削除 marxes = ['Groucho','Chico','Harpo'] del marxes[-1] print(marxes) marxes.remove('Chico') print(marxes) marxes.pop() print(marxes)
3.2.10 index()/inで要素のオフセットを知る
############### ### index() ### ############### marxes = ['Groucho','Chico','Harpo'] print(marxes.index('Chico')) # marxes.index('Karl') # 無いものを選択するとエラーになる ###################### ### inを用いた実験 ### ###################### print('Chico' in marxes) print('Karl' in marxes)
3.2.11 count()で個数の勘定
########################### ### count()で要素の個数 ### ########################### marxes = ['Groucho','Chico','Harpo'] print(marxes.count('Groucho')) print(marxes.count('Karl'))
3.2.12 join()で文字列への変換
############################ ### join()で文字列に結合 ### ############################ marxes = ['Groucho','Chico','Harpo'] print(','.join(marxes)) # 1つの文字列として結合 print(' '.join(marxes)) # 1つの文字列として結合 # join()はsplit()の逆 joined = ','.join(marxes) separated = joined.split(',') marxes == separated
3.2.13 sort()による並び替え
値の順序で並び替えるときには()を用いる。このとき、
- ():リスト関数で、リスト自体を変化させる
- ():汎用関数で、ソートしたリストのコピーを返す(元の変数値自体は変えない)
######################## ### sort()で並び替え ### ######################## # marxes = ['Groucho','Chico','Harpo'] print(marxes) # original marxes.sort() print(marxes) # 並び替え済 # marxes = ['Groucho','Chico','Harpo'] print(sorted(marxes)) print(marxes)
3.2.14 len()による長さの取得
############# ### len() ### ############# marxes = ['Groucho','Chico','Harpo'] len(marxes)
3.2.15 =による代入とcopy()によるコピー
a = [1,2,3] print(a) ### bはaを参照しているのみであるため、aを変えるとbも変わる b = a print(b) a[0] = 'surprise' print(a) print(b) ### そこでcopy(),list()または[:]でリストをコピーする a = [1,2,3] b = a.copy() c = list(a) d = a[:] print(a == b) print(a == c) print(a == d) a[0] = 'shock' print(a) print(b) print(c) print(d)
*1:第2版が出ているものの初版しか持っていないのでこちらで。