ITメモ
Python / パイソン




【Python】「Python」のデータ構造「リスト」「タプル」「辞書」の「使い方」

【Python】
「Python」のデータ構造「リスト」「タプル」「辞書」の「使い方」







はじめに



「Python」では、
「データ構造」に、

・リスト(list)
・タプル(tuple)
・辞書(dict)

などが用意されている。


Back

「リスト(list)」の「使い方」



「Python」のリストは、
一つのリスト名の中に複数の値を収めたもので、
一つ一つの値には、キー値が与えられ、
リスト名とキー値によって、一つ一つの値にアクセスできる。





リストの書式

リスト名=[値,値,値,値,値,値,値,値・・・・]

リストは、「[] (角かっこ)」で値を囲むことで、リストに値を格納できる。
値は、「,(コンマ)」で区切ることで、複数の値を一度に格納できる。


リストの作成方法

NumList = [10, 20, 30, 40]

Colors = [
'red',
'green',
'blue',
]

異なる型の要素
Diff = [10, 'ABC']

リスト内のリスト
WList = [[1, 2], [3, 4], [5, 6]]



リストの要素へのアクセス


A = [1, 2, 3, 4, 5]
for n in A:
print n

要素番号でのアクセス(最初の要素番号は 「0」番目)
Alph= ['A', 'B', 'C', 'D', 'E', 'F', 'G']
Alph1 = Alph[0] # 0番目: 'A'
Alph2 = Alph[2] # 3番目: 'D'

要素番号の範囲指定アクセス
・[n:m] で n番目から m - 1番目の要素を参照。
・n を省略すると最初から。
・m を省略すると最後まで。
・[n:m:s] は s個とばしで参照。
・n, m にマイナスの値を指定すると、後ろから数える。
・リストのリストを作ることも可能。

Num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Num1 = Num[2:4] # 2番目から3番目: [2, 3]
Num2 = Num[2:] # 2番目から最後: [2, 3, 4, 5, 6, 7, 8, 9]
Num3 = Num[:4] # 最初から3番目: [0, 1, 2, 3]
NumSplit = Num[1:8:2] # 1番目から7番目まで2個とばし: [1, 3, 5, 7]

Alph = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
Alph1 = Alph[-1] # 最後の文字 'G'
Alph2 = Alph[-3:-1] # 最後から3番目の文字から最後から1番目の前の文字: ['E', 'F']

WList = [[1, 2], [3, 4], [5, 6]]
for list in WList:
for n in list:
print n, #=> 1 2 3 4 5 6

リストの結合
「+演算子」を用いてリストを結合することが可能。
print [1, 2, 3] + [4, 5, 6] #=> [1, 2, 3, 4, 5, 6]

リストの数
len() を用いてリストの個数をカウント。
print len([1, 2, 3]) #=> 3






「リスト関数」とは


「リスト」の編集に使用できる「関数」「メソッド」のことを「リスト関数」という。

メソッド(関数)
append() 「append()」メソッドは、「リストの末尾」に要素を追加することができる。
insert() 「insert」メソッドを使うと、「指定した場所」に要素を追加することができる。
del() 「del()」メソッドは、「指定した要素」を削除することができる。
pop() 「pop()」メソッドは、「指定した要素」を削除することができる。
len() 「len()」メソッドは、「リスト」「タプル」に格納されている「要素数」を返す。
copy() 「copy()」メソッドは、「リスト」「タプル」の複製を作成する。
sort()メソッド 指定された「リスト」の中にある要素を並び変える。
sorted関数 指定された「リスト」の中にある要素を並び替え、コピーを作成する。
元データのリストは、変更されない。
print() 引数で与えられた情報を、コンソールの出力領域に表示する。
map() 「map()」は、リストの各要素に対して処理を行い、行った結果を返す。
filter() リストの各要素に対して処理を行い、処理結果が真となる要素のみを取り出す。
reduce() 「reduce()」 はリストの最初の2要素を引数に処理を呼び出し、
結果と次の要素を引数に処理の呼び出しを繰り返し、単一の結果を返す。
in 演算子 「in」演算子は、
「リスト」「タプル」に、「in」演算子で指定した、
値が、含まれているかをチェックすることができる。

”検索したい文字列” in リストの変数名
”検索したい文字列” in タプルの変数名





リスト関数「map()」

map() はリストの各要素に対して処理を行い、行った結果を返す。
下記の例では各要素を2倍にする処理を行う。

a = [1, 2, 3]

def double(x): return x * 2
print map(double, a) #=> [2, 4, 6] : 関数方式
print map(lambda x: x * 2, a) #=> [2, 4, 6] : lambda方式
print [x * 2 for x in a] #=> [2, 4, 6] : 内包表記(後述)




リスト関数「filter()」

「filter()」は、 リストの各要素に対して処理を行い、処理結果が真となる要素のみを取り出す。
下記の例では各要素から奇数のみを取り出します。

a = [1, 2, 3]

def isodd(x): return x % 2
print filter(isodd, a) #=> [1, 3] : 関数方式
print filter(lambda x: x % 2, a) #=> [1, 3] : lambda方式
print [x for x in a if x % 2] #=> [1, 3] : 内包表記(後述)




リスト関数「reduce()」

「reduce()」 はリストの最初の2要素を引数に処理を呼び出し、
結果と次の要素を引数に処理の呼び出しを繰り返し、単一の結果を返す。
下記の例では、各要素の合計を計算する。

a = [1, 2, 3, 4, 5]

def add(x, y): return x + y
print reduce(add, a) #=> 15 : 関数方式
print reduce(lambda x, y: x + y, a) #=> 15 : lambda方式




リストの内包表記



「リストの内包表記」を用いることで、
「map()」「filter()」「lambda」を使用せず、
簡単な「リスト演算」を行うことができる。



a = [1, 2, 3]
print [x * 2 for x in a] #=> [2, 4, 6]
print [x * 2 for x in a if x == 3] #=> [6]
print [[x, x * 2] for x in a] #=> [[1, 2], [2, 4], [3, 6]]
print [(x, x * 2) for x in a] #=> [(1, 2), (2, 4), (3, 6)]

b = [4, 5, 6]
print [x * y for x in a for y in b] #=> [4, 5, 6, 8, 10, 12, 12, 15, 18]
print [a[i] * b[i] for i in range(len(a))] #=> [4, 10, 18]





「set」は、
重複の無いリストを扱うことができる。
います。セット同士の減算、OR、AND、XOR 操作が可能です。

a = set(['red', 'blue', 'green'])
b = set(['green', 'yellow', 'white'])

print a #=> set(['red', 'blue', 'green'])
print b #=> set(['green', 'yellow', 'white'])
print a - b #=> set(['red', 'blue'])
print a | b #=> set(['red', 'blue', 'green', 'yellow', 'white'])
print a & b #=> set(['green'])
print a ^ b #=> set(['red', 'blue', 'yellow', 'white'])
print 'green' in a #=> True
a.add(['black'])
print a #=> set(['red', 'blue', 'green', 'black'])



Back

「タプル(tuple)」の「使い方」



タプル(tuple)は、「()(かっこ)」 で囲んだ複数の値を要素として格納したもの。

「タプル(tuple)」と「リスト(list)」の違いは、要素を変更できるかできないかの違い。
「タプル(tuple)」は、要素の変更ができない。
「リスト(list)」は、要素の変更できる。

要素がひとつだけの場合は、最後に「,(カンマ)」を記述しなければ、「タプル(tuple)」にならず、変数となる。


タプルからリストへの変換方法


タプルからリストに変換するには、 関数「list()」を使用し、
リストからタプルに変換するには、関数「tuple()」使用する。

print list([1, 2, 3]) #=> (1, 2, 3)
print tuple((1, 2, 3)) #=> [1, 2, 3]



タプル(tuple)のサンプルコード


Num = (10, 20, 30, 40)
NoTuple = (10) # タプルではなく変数として数値10を格納。
Tuple = (10,) # タプルとして値「10」を要素として格納。
List1 = [10, 20, 30, 40]
Tuple1 = (10, 20, 30, 40)
List1[2] = 60 # リストなので、代入可能。
Tuple1[2] = 60 # タプルなので、変更不可。エラーで「TypeError例外」が発生。



Back

「辞書(dict)」の「使い方」



「辞書(dict)」とは、「キー」と「値」を1セットとして、
「辞書(dict)」に複数セットを保存できる変数の一つ。
「キー」は、文字・数字で作成し、色や名前などでもOK。
「値」は、文字・数字で格納する。


辞書(dict)の書式


Dict1 = {'Apple': 30, 'Orange': 40, 'Grape': 80}


辞書(dict)へのアクセス


各要素へのアクセス

D1 = Dict1['Apple']
D2 = Dict1['Orange']
D3 = Dict1['Grape']


全要素へのアクセス


辞書で、全要素や値を参照するには、「items()」「keys()」「valus()」「iteritems()」などの関数を使用。


for key, value in 辞書名.items():
print key, value # Apple 80, Apple 30, Orange 40

for k in 辞書名.keys():
print k, 辞書名[key] # Orange 40, Apple 30, Grape 80

for v in 辞書名.values():
print v # 80, 30, 40

for k, v in 辞書名.iteritems():
print k, v # Grape 80, Apple 30, Orange 40




Back