-
ホーム 戻る
第8章 コレクション リスト ディクショナリ タプル セット
-
"中条ふみ子(歌人・大正11年帯広生まれ・歌集「乳房喪失」昭和29年8月3日死)"
灼きつくす口ずけさへも目をあけてうけたる我をかなしみ給え
灯を消してしのびやかに隣に来るものを快楽の如くに今は馴らしつ
施術されつつ麻酔が誘いゆく過去に倖せなりし我が裸身見ゆ
遺産なき母が唯一のものとして残しゆく「死」を子等は受け取れ
音高く夜空に花火うち開きわれは隈なく奪はれてゐる
(詩の荒野より・清水昶・小沢書店 リストとはなにか
-
-
リスト:要素(項目)が一定の順序で並べるための特性をもったデータ型。 :あらゆるオブジェクトを構成要素とすることができる。リスト自身も含む :オブジェクトの集合:インデックスによってアクセスできる。
-
リストはapend()のような自分自身を扱う関数メソッドを持つ
-
:内容を変更できる。
-
:配列は他のオブジェクトへの参照を順番にならべたもの。 : 配列が保持している、個々のオブジェクトへの参照=要素の確認。 複数の値を保持する変数。順番を使ってアクセスする。 :型の混在可能:変更できる: 添え字(インデックス)参照 :
-
リストの要素は0から始まる番号で順序付けられており、その添え字(番 号)と添え字参照演算子[ ]を用いて参照先のオブジェクトにアクセス。 スライス:配列から部分を取り出す仕組み: x(i : j)はx[1]からx[j-1]並べたリストになる。iを省略すると0とみ なされ、jを省略すると最後までとみなされる。
-
>>> a=[1.0,2.0,3.0] >>> a[1:3] [2.0, 3.0] >>> a[:3] [1.0, 2.0, 3.0] >>> a[0:2] [1.0, 2.0] >>> a[0:] [1.0, 2.0, 3.0] >>>
-
>>> s=[10,4,3.5,'python'] >>> s1=[8,3,[s],5.8] >>> s [10, 4, 3.5, 'python'] >>> s1 >>> s1=[8,3,s,5.8] >>> s1 [8, 3, [10, 4, 3.5, 'python'], 5.7999999999999998]
-
>> month=['January','February','March','April','May','June','July','August','September','October','November','Desember'] >>> month[4] 'May'
インデックスを選択して要素を取り出す 配列の順番は0から始まる。 >>> tanka=[200,100,300,50,2000] >>> kosu=[10,20,10,50,5]
-
リストどうしを直接掛け算すると
-
>>> tanka * kosu
-
Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> tanka * kosu : can't multiply sequence by non-int of type 'list' インデックスを指定して掛け算する
-
>>> tanka[0]*kosu[0]+tanka[1]*kosu[1] 4000 >>> tanka[0]*kosu[0]+tanka[1]*kosu[1]+tanka[2]*kosu[2]+tanka[3]*kosu[3]+tanka[4]*kosu[4] 19500
-
>>> 例1
-
文字列 cattle = 'yahoo' リスト container = [cattle,cattle] print container ['yahoo', 'yahoo']
変数に代入して要素cattleの内容を変更 cattle = 'yapoo' print container
-
['yapoo', 'yapoo']
-
例 2
-
a=1 b='str' c=[a,b,3,'mojiretu']
変数に代入して要素の内容を変更 d= [a,c,[123]] print c [1, 'str', 3, 'mojiretu'] print d
-
[1, [1, 'str', 3, 'mojiretu'], [123]]
例3
-
>>> l1=[] l1 空のリストを作る
-
[] 4つの要素を持つリストをつくる
-
>>> l2=[0,1,2,3] >>> l2 [0, 1, 2, 3] リストのネスト
-
>>> l3=['abc',['def','ghi']] >>> l3 ['abc', ['def', 'ghi']]
リストの長さを確認
-
>>> len(l2) 4 連結する
-
>>> l1+l2 [0, 1, 2, 3] 繰り返し
-
>>> l2*3 [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
ループと特定の要素がふくまれているかを確認する
-
>>> for x in l2: 3 in l2 print 'ok'
-
True ok True ok True ok True ok >>> for x in l2: 3 in l2
-
True True True True
-
>>> l1=[1,2,3,4,5] リストに追加する
-
>>> l1.append(6) >>> l1 [1, 2, 3, 4, 5, 6] インデツクスで検索する >>> l1.index(1) 2
-
l1をソートする
-
>>> l1.sort() >>> l1 [1, 2, 3, 4, 5, 6] >>> 反転する
- >>> l1.reverse()
[ 6, 5, 4, 3, 2, 1] popする
- popした要素はリストから消える
-
>>> l1.pop() 1
-
整数のリストをつくる
-
>>> range(4) [0, 1, 2, 3] タプルをつくる
-
>>> xrange(0,4) xrange(4)
-
>>> xrange(1,4) xrange(1, 4)
-
リストの内包表示をつくる
-
>>> l4=[x**2 for x in range(5)] >>> l4 range(5)の内容は「0,1,2,3,4」
-
[0, 1, 4, 9, 16]
リストをつくる[ ]でむ >>> c=[12,23,4,45,56,67,78,89] >>> c [12, 23, 4, 45, 56, 67, 78, 89] >>> type(c) cの型を調べる
-
<type 'list'>
>>> name=['戸張','山田','田中']
[ ]の中は0から1,2,3・・・とインデックスがつけられる。
-
>>> print '最初の名前は',name[0],'です。\n'
インデックス[0]の指定で0番の容(要素)が呼び出される。
-
-
最初の名前は 戸張 です。
>>> print name[0]
戸張
>>> name[0]='高橋' 要素を変更する[0]に’高橋’が格納
>>> print name[0],name[1],name[2] 0番のインデックスの内容が変化している。
高橋 山田 田中
>>> d=[54,78,98] 数値オブジェクトのリストをつくる >>> s=0 >>> for x in d: リストの和を求めてる累加してゆく s=s+x print s
54 132 230
>>> month=[('January',31),('February',28),('March',31),('April',30),('May',31),('June',30),('July',31),('August',31),('September',30),('Octobe',31),('Nobember',30),('Desember',31)] >>> month[7] インデクスで値を求める ('August', 31)
>>> c=[1,"str",3] >>> c[0] 1 >>> c[1] 'str' >>> c[2] 3 >>> c[4]
Traceback (most recent call last): エラー表示 範囲外を示す File "<pyshell#6>", line 1, in <module> c[4] IndexError: list index out of range
負の添え字:後ろから数える >>> c[len(c)-1] len()リストの長さを確認する 3 >>> c[len(c)-2] 'str' >>> c[len(c)-5] 'str' >>> print len(c) 3 >>> c[len(c)-6] 1 >>> c[len(c)-7] 要素の2倍6を超えた(+3−3)
Traceback (most recent call last): 範囲外のエラー表示される File "<pyshell#7>", line 1, in <module> c[len(c)-7] IndexError: list index out of range
>>> c=[1,"str",3]
>>> c[0:1] 長さ付き添え字: nを含みm個の要素を を生成する
[1] >>> c[2:-1] 負のインデックスは右から数える [] >>> c[-2:-1] ['str'] >>> c[-2:3] ['str', 3] >>> c[4:5]
(2) リストを別の角度から
>>> another =[1,2,3] >>> print another [1, 2, 3] >>> print another[2] 0かららスタートして2つ目 の要素を要求 3 >>> another[2] = 7 リストの要素を変更 >>> print another [1, 2, 7]
>>> another=[1,2,3,4,5] リストの要素をまとめて 変更 >>> another[0:3]=['x','y','z'] >>> another ['x', 'y', 'z', 4, 5] >>> >>> print another[-1] 後ろから1つ目 5
>>> aList[] >>> aList.append(42) リストの追加 >>> print aList apend(x) [42]
>>> aList =[42] >>> another =[1,2,7] >>> aList.append(another) >>> print aList [42, [1, 2, 7]]
>>> print aList[1][2] インデックス1の2番目すべて0から数える 7 >>> del aList[1] インデックスの0から1番目を削除 >>> print aList [42]
>>> newList = aList + another >>> print newList [42, 1, 2, 7]
>>> zeroList = [0] * 5 >>> print zeroList [0, 0, 0, 0, 0]
>>> print len(aList) 1 >>> print len(zeroList) 5
>>> 'xyz'[0] 文字列のインデックス0番 'x' >>> 'xyz'[-1] 'z'
>>> 'xyz'.upper() 大文字にする 'XYZ' >>> 'xyz'.upper()[0] 0番目の内容を大文字にする 'X'
>>> cattle= 'yahoo' >>> container = [cattle,cattle] >>> cattle[2]='p'
Traceback (most recent call last): エラー表示文字列は不変化 File "<pyshell#3>", line 1, in <module> cattle[2]='p' TypeError: 'str' object does not support item assignment >>> container ['yahoo', 'yahoo'] >>> container.append('p') 追加 >>> container ['yahoo', 'yahoo', 'p']
>>> a=[1,2,3,4] >>> len(a) 長さ調査 4 >>> len(a)==0 比較 False >>> x=6 >>> a.append(x) 末尾要素追加 >>> a [1, 2, 3, 4, 6] >>> a.insert(0,x) 先頭追加 >>> a [6, 1, 2, 3, 4, 6] >>> a.pop() 末尾取出 6 >>> a [6, 1, 2, 3, 4] >>> a.pop() 末尾取出 4 >>> a [6, 1, 2, 3] >>> b=[7,8,9] >>> a.extend(b) 末尾にリスト追加 >>> a [6, 1, 2, 3, 7, 8, 9] >>> a[:]=[] >>> a [] >>> a.insert(1,x) 先頭要素追加 >>> a [6] >>> a.insert(3,x) 先頭要素追加 >>> a [6, 6] >>> del(a[0]) >>> a [6] >>> a.insert(5,x) x=6 >>> a [6] >>> a.insert(6,x) 引数2個のうち、2番目のみ追加 >>> a [6, 6] >>> a.insert(7,x) >>> a [6, 6, 6] >>> a.insert(8,x) >>> a [6, 6, 6, 6] >>> a.insert(0,x) >>> a [6, 6, 6, 6, 6] >>> del(a[3]) インデクスで削除 >>> a [6, 6, 6, 6]
>>> del(a[3]) >>> a [6, 6, 6] >>> del(a[2]) >>> a [6, 6] >>> a.count(x) 指定した要素の数を調査 2 >>> x in a 要素の存在確認 True >>> a.index(x) 値を指定してインデクスを調査 0 >>> a[0] インデクスを指定して値を調査 6 >>> a[-1] 6 >>> a[0:1] [6] >>> sorted(a) ソートしたコピーを取り出す [6, 6] >>> a.insert(0,5) 先頭に追加 >>> a [5, 6, 6] >>> a.insert(0,'g') 先頭に追加
>>> a ['g', 5, 6, 6] >>> a[1:2] スライスする [5] >>> a.sort() ソートする >>> a [5, 6, 6, 'g'] >>> a.insert(0,'f') 先頭に追加 >>> a ['f', 5, 6, 6, 'g'] >>> sorted(a) ソートしたコピーを取得 [5, 6, 6, 'f', 'g'] >>> a.remove(x) 値を指定して除去
>>> a ['f', 5, 6, 'g'] >>> a.sort() ソートする >>> a [5, 6, 'f', 'g'] >>> a.reverse() 反転する >>> a ['g', 'f', 6, 5]
(3)文字列のある一部を取り出す スライシング
>>> a = '0123456789' 文字列 >>> a[3:5] 3から4番目までの 範囲 '34' >>> a[1:-2] 始めの0番から数えて 1番から要素の終わりの0 番から数えてー2番目の次まで '1234567' >>> '0123456789'[0:8:2] 0から数えて7番目ま で、2つおきに '0246' >>> 'abc'[5:] 5番目から '' >>> 'abc'[:100] 99番目まで ' abc'
(4) リストのある一部を取り出す スライシング
a=['zero', 'un', 'os', 'tre'] リスト作成する >>> len(a) 要素の長さを確認 4 >>> a[0] 要素をインデックスで選択する
' zero' >>> a[3] ' tre' >>> a[-1] ' tre' >>> a[-2] ' os' >>> a[0:3] 要素を範囲で選択する ['zero', 'un', 'os'] >>> a[3]='z' 要素を変更(更新)する >>> a ['zero', 'un', 'os', 'z'] >>> a[1:2]=['x','y'] 要素をまとめて変更 >>> a ['zero', 'x', 'y', 'os', 'z']
>>> a=[0,'un',True] >>> a [0, 'un', True] >>> a.append([10.1,'ten_tow']) リストをリストに加える >>> a [0, 'un', True, [10.1, 'ten_tow']]
>>> a[-1] [10.1, 'ten_tow']
>>> a[-1][0] -1の要素リストの0番の要素を選択
10.1
(5)iter()について
iter(object):反復子を生成して返す。反復子とはアイテムを一つずつ呼び出せるnextメソッドを持つオブジェクト
リスト、辞書、ファイルのような組み込み型オブジェクトをイテレータオブジェクトに変換。 iter()という組み込み関数を利用。
>>> i = iter([1,2,3]) >>> i.next() 1 >>> i.next() 2 >>> i.next() 3 >>> i.next() Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> i.next() StopIteration 要素がないというエラー表示
(6)復習リストの作り方
[ ] >>> [ ] 空のリスト [ ] >>> [5] 数字5のリスト [5]
>>> [ ' hello ', ' good by ' ] 2つの文字列のリスト ['hello', 'good by ']
>>> names = [ ' Aida ', ' Belle ', ' Chris '] 3つの文字列のリスト
>>> print names ['Aida', 'Belle', 'Chris'] >>>print names[0] Aida >>> print names[1] Belle >>> print names[2] Chris >>> print names[3] 0から数えるので3番目はないのでエラーとなる Traceback (most recent call last): エラー File "<pyshell#8>", line 1, in <module> print names[3] IndexError: list index out of range
リスト項目は変数のように扱い代入できる。
>>> other_peeps = [0,1,2,3,4,5,6,7,8,9,] >>> other_peeps [0] = ' ppp ' >>> other_peeps [1] = ' aaa ' > >> other_peeps [3] = ' ccc ' >>> other_peeps [1] = ' ppp aaa ' >>> print other_peeps ['ppp', 'ppp aaa', 2, 'ccc', 4, 5, 6, 7, 8, 9]
(7) さらなるリストメソッド.
append、index、sort、reverse、insert、remove、extend、count、pop、rindex xrange >>> a = ['spam','eggs',100,1234] >>> a ['spam', 'eggs', 100, 1234]
>>> a[0] 'spam' >>> a[3] 1234 >>> a[-2] 100 >>> a[2] = a[2] + 23 >>> a[2] 123 >>> a.append(333) リストの末尾に加える
>>> a['spam', 'eggs', 123, 1234, 333] >>> a.index(333) 値が333である最初の アイテムのインデックス返す 4
>>> s='Albert Einstein' 文字列 >>> s.index('bert') 2 >>> s.rindex('in') 値がinである最後のインデッ クスを返す
13 >>> s.index('in') 8 >>> a.sort() リストをコピーせずにそのままソートする >>> a [123, 333, 1234, 'eggs', 'spam'] >>> a.reverse() リストをコピーせずにそのまま逆順にソート >>> a ['spam', 'eggs', 1234, 333, 123]
>>> [ i for i in range(10)] range(x)は0からxまでの汎用目的の の連続する整数からなるオブジェクト(リ スト)を返す 。 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[66.25,333,333,1,1234,5]
>>> a.count(333) count()要素の数を返す 2 >>> a.count(1234) 1 >>> a.count(345) 要素が存在しない 0 >>> a.count(x)
Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> a.count(x) NameError: name 'x' is not defined
>>> a.insert(2,-1) insert(x)位置、内容で追加する >>> a [66.25, 333, -1, 333, 1, 1234, 5] >>> a.remove(333) remove(x)要素を削除する >>> a [66.25, -1, 333, 1, 1234, 5] >>> a.remove(333) >>> a [66.25, -1, 1, 1234, 5] >>> a.extend(a) extend(x)リストaを追加する >>> a [66.25, -1, 1, 1234, 5, 66.25, -1, 1, 1234, 5]
>>> a.count(1) count(x)要素xの数を返す 2
>>> s=['a','c','b','a','b'] >>> s.count('a') >>> print s.count('a') 2 >>> print s.count('c') 1 for i in xrange(10) :for のように反復に使用するための 用のオブジェクトを返しす。 >>> for i in xrange (5) : print "おはよう"
おはよう おはよう おはよう おはよう おはよう
リストをスタックとして使う
>>> stack=[3,4,5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() 7 >>> stack.pop() 6 >>> stack.pop() 5 >>> stack [3, 4]
リストをキューとして使う
>>> queue=["Taro","Jiro","Saburol"] >>> queue.append("Siro") >>> queue.append("Goro") >>> queue.pop(0) 'Taro' >>> queue.pop(0) 'Jiro' >>> queue ['Saburo', 'Siro', 'Goro']
まとめ
問題 print ('いちめんのなのはな ') いちめんのなのはな 10回繰り返す いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな
>>> len('abc') コンテナーに含まれるアイテムの数を返す 3 >>> len([1,2,3,4]) 4
文字列の操作
>>> 'abcd'[2:4] 0から数えて2番目から4-1番目までの間 'cd' >>> ['x','y','z','w'][2:4] ['z', 'w'] >>> 'ab' + 'cd' 文字列を加算する 'abcd' >>> ['x','y'] + ['z','w'] リストを加算する
['x', 'y', 'z', 'w'] >>> a = ['x','y','z','w'] >>> a[2:4] リストの0から数えて2番目から4-1番目までの間を選択する ['z', 'w']
リストも文字列も「順序まで考えた要素の集まり」シーケンス型。
>>> array1=[1,2,'str'] >>> array1==[1,2,'str','extra'] 配列を比較する False >>> array2=[1,2,'str'] >>> array2==array1 True >>> array1==['str',1,2] False >>> >>> a = [66.25, 333, 333, 1, 1234.5] リスト作成
>>> print a.count(333), a.count(66.25), a.count('x') 要素の出現回数を調べる
2 1 0
>>> a.insert(2, -1) インデクス2の前にデーター1を挿入する
>>> a.append(333) リストの末尾に要素を追加
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333] 確認
>>> a.index(333) 要素のインデクスを返す
1
>>> a.remove(333) 要素を削除する
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse() 要素を反転する
>>> a
[333, 1234.5, 1, 333, -1, 66.25] 要素をソートする
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]>>> a.reverse() 逆順にする >>> a [1234.5, 333, 333, 66.25, 1, -1] >>>
・・・するには(リストの文法)
1・空のリストを作るには [ ]
s1=[]
[]
2・数値リストをつくるには [ ]
>>> d1=[ 1,2,3,4,5]
[,1,2,3,4,5]
3・文字列のリストを作るには [ ]
s1=['abc','def'','ghi']
4・リストを連結するには +(引き算はできない)
>>> s2=s1+d1 >>> s2 ['abc', 'def', 'ghi', 1, 2, 3, 4, 5] 5・リストをネストするには [ ]
>>> s3=[s1,s2] >>> s3 [['abc', 'def', 'ghi'], ['abc', 'def', 'ghi', 1, 2, 3, 4, 5]]
6・リストの長さを確認するには len( )
>>> len(s3) 2
7・要素の存在を確認するには in
>>> 3 in d1 True >>> 'abc' in s3 False >>> ['abc','def','ghi'] in s3 True >>> 'abc' in s2 True
8・リストにオブジェクトを追加するには .append
>>> s3.append('gogo') >>> s3 [['abc', 'def', 'ghi'], ['abc', 'def', 'ghi', 1, 2, 3, 4, 5], 'gogo']
9・リストをソートするには
>>> s2.sort() .sort()
>>> s2 [1, 2, 3, 4, 5, 'abc', 'def', 'ghi'] >>>
10・リストを反転するには
>>> s2.reverse() .reverse()
>>> s2 ['ghi', 'def', 'abc', 5, 4, 3, 2, 1]
11・要素のインデクスを検索するには .index()
>>> s2.index('abc') 2
12popするには(後入れ先き出しで一番後ろの要素をoutputして削除する
>>> s2.pop() .pop()
1
12・添え字(インデックス)参照演算子[]で参照先のオブジェクトにアクセスするには
>>> c=[1,'str',3] 添え字番号は0 1 2と数えます。 [ ] >>> c[0] 1 >>> c[1] 'str' >>> c[2] 3 >>> c[3]
Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> c[3] IndexError: list index out of range >>> c[-1] 添え字番号は後ろからー1 −2 −3と数えます。 3 >>> c[-2] 'str' >>> c[-3] 1 >>> c[-4]
Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> c[-4] IndexError: list index out of range >>>
13・スライスを利用して要素を選択すると [ : ]
>>> c=[1,'str',3]
>>> c[0:1] インデックスの0から1−1までを取り出す [1] >>> c[0:2] インデックスの0から2−1までを取り出す
[1, 'str'] >>> c[0:3] インデックスの0から3−1までを取り出す
[1, 'str', 3]
>>> c[0:4] インデックスの0から4−1までを取り出す
[1, 'str', 3] 最後の要素まで選択される >>> c[0:-1] インデックスの0から−1-1までを取り出す
[1, 'str'] >>> c[0:-2] インデックスの0から-2−1までを取り出す
[1] >>> c[0:-3] インデックスの0から-3−1までを取り出す
[] 範囲外 >>> c[1:0] インデックスの1から0−1までを取り出す
[] 範囲外
>>> c[1:1] インデックスの1から1-1までを取り出す
[] 範囲外 >>> c[1:2] インデックスの1から2-1までを取り出す
['str'] >>> c[1:3] インデックスの1から3-1までを取り出す
['str', 3] >>> c[1:4] インデックスの1から4-1までを取り出す
['str', 3] 最後の要素まで選択される
>>> c[2:0] インデックスの2から0-1までを取り出す
[] 範囲外
14・リストを使って足し算をする [ ] +
>>> d=[123,456,789] >>> d1=[ 987,654,321] >>> d+d1 [123, 456, 789, 987, 654, 321] リストの足し算はリストの連結となる(引き算はできない)
>>> s=['abc','def','hij'] >>> d+s [123, 456, 789, 'abc', 'def', 'hij']
>>> s2=['asd'] >>> s+s2 ['abc', 'def', 'hij', 'asd'] >>> s3=['jkl',123,] >>> s+s2+s3 ['abc', 'def', 'hij', 'asd', 'jkl', 123]
リスト + 数値 エラー
リスト + 文字列 エラー
>>> d=[123,456,789] >>> d1=[987,654,321] >>> d[0]+d1[0] 1110
>>> d[2]+d1[1] 1443
15・リストを使って掛け算する [ ] *(割り算はできない)
>>> s2*3 ['asd', 'asd', 'asd'] 繰り返し
>>> d*2 [123, 456, 789, 123, 456, 789]
リストの要素を置き換えるには
(8)ディクショナリとは
キーと値がペア。キーをインデックスとす る。キーと値を関連付けるデータ型。 値にはPythonで利用できるデータ型に制約なし。リストも辞書も利用できる。 キーは文字列や数値など不変形が利用できる。 ディクショナリの利用は、値をキーとともに格納し、キーを指定して値を引き出すこと。。 ディクショナリはサーチテーブルに使われる・ ディクショナリは構造化テーブルの表現に使われる。「レコード」や「構造体」と同じ機能を果たす。オブジェクトを順不同にならべたもの。数字でなくキーによってデータニアクセスする。リストと同様伸縮自在。どのような型のオブジェクトでも要素にできる。ディクショナリの中にディクショナリを入れることができる。ネストにも対応できる。オブジェクトリファレンスの順不同テーブル(表)。 ディクショナリは「キー:値」のペアによりソートされない集合である。 ディクショナリにはデータの順序は保証されず、順序という考えはない。 ディクショナリに要素を追加する場合は、存在しないキーを指定して要素を規定する。 キーにはあらゆる不変型が使える。文字列や数値は常にキーとして使える。タプルもキーとして使える。文字列、数値、タプルのみを含む場合のみ。可変型のオブジェクトが直接間接に含まれているタプルはキーとして使えない。リストもキーとして使えない。 キーの唯一性(一つのディクショナリの中で重複しないことを条件とする)る。「キー:値」ペアをdelで削除することも可能。すでに使われているキーで格納を行うと、前の値は失われる。存在しないキーで値を引き出そうとするとエラーになる。 キーの存在するかチェックしたいときは、メソッドhas_keyか、キーワードinを使う。
>>> d1={} 要素のないディクショナリ作成
>>> d2={'apple':1,'egg':5} 要素二つのディクショナリ >>> d3={'food':{'ham':1,'egg':2}} ネスト >>> d2['egg'] 5 >>> d3['food']['ham'] 1 >>> d2.has_key('egg'),'eggs' in d2 要素の確認 (True, False) >>> d2.keys() キーリストの出力 ['egg', 'apple'] >>> d2.values() 値リストの出力 [5, 1] >>> d2.copy() デフォルトの取得 {'egg': 5, 'apple': 1} >>> d2.update(d1) >>> d2 {'egg': 5, 'apple': 1}
>>> len(d1) 0
長さの確認
>>> d2={'apple':2,'ham':1,'eggs':3} >>> d2['apple']
2 >>> d2 {'eggs': 3, 'apple': 2, 'ham': 1} >>>
>>> d2={'apple':2,'ham':1,'eggs':3} l>>> len(d2) 3 >>> d2.has_key('ham') True >>> 'ham' in d2 True >>> d2.keys() ['eggs', 'ham', 'apple']
>>> d2['ham']=['candy','cake','fry'] >>> d2 {'eggs': 3, 'ham': ['candy', 'cake', 'fry'], 'spam': 2} >>> del d2['eggs'] >>> d2 {'ham': ['candy', 'cake', 'fry'], 'apple': 2} >>> d2['lunch']='bacon' apendを使わずによその追加ができる。 >>> d2 {'lunch': 'bacon', 'ham': ['grill', 'cake', 'fry'], 'spam': 2} >>> d2.values(),d2.items() ([3, 1, 2], [('eggs', 3), ('ham', 1), ('apple', 2)]) リストはループを作るときに使用
>>> d2.get('apple'),d2.get('toast'),d2.get('toast',88) 第二引数が戻される。 (2, None, 88)
>>> d2 {'eggs': 3, 'ham': 1, 'apple': 2} >>> d3={'toast':4,'coffe':5} >>> d2.update(d3) マージできる。
>>> d2 {'toast': 4, 'coffe': 5, 'eggs': 3, 'ham': 1, 'apple': 2} >>> 応用例(1)
>>> population={u'東京都':1257,u'大阪府':881,u'神奈川県':879} >>> population[u'東京都'] 1257
>>> population[u'神奈川県']*=1.05 #(神奈川県の人口5%増加) >>> population[u'神奈川県'] 922.95000000000005 >>>
応用例(2)
>>> d={'iron':'python','c':'python'} デイクショナリを作る >>> d {'c': 'python', 'iron': 'python'}
>>> type(d) dのデータ型を調べる
<type 'dict'>
>>> d['iron'] キーを指定して要素を調べる
'python'
>>> d['c'] 同上
'python'
>>> d['title']='programing python' キーを規定して要素を設定する
>>> d
{'c': 'python', 'iron': 'python', 'title': 'programing python'}
keyの存在を調べる
>>> d.has_key('python')
False
>>> d.has_key('iron')
True
>>> d
{'c': 'python', 'iron': 'python', 'title': 'programing python'}
>>> d.get('title') キーtitleに割り当てられた要素を得る
'programing python'
>>> d.update({'iron':'ironpython','p':'programing'}) キーを指定して、上書き、追加する
>>> d
{'p': 'programing', 'c': 'python', 'iron': 'ironpython', 'title': 'programing python'}
>>> d.keys() ['c', 'iron', 'title','p']
要素を削除するにはdelを使う。
>>> del (d['p']) delでキー、要素を削除する
>>> d
{'c': 'python', 'iron': 'ironpython', 'title': 'programing python'} p:programingは除去されたいる
>>> d.setdefault('iron') キーに割り当てられた値を返す
'ironpython'
>>> d.setdefault('a') 存在しないキーを指定し、値が与えられな い と「none」を追加
>>> d
{'a': None, 'c': 'python', 'iron': 'ironpython', 'title': 'programing python'}
>>> d.setdefault('b','new') 指定したキーが存在しないと値を返し、キーと値 を追加する
'new'
>>> d
{'a': None, 'c': 'python', 'b': 'new', 'title': 'programing python', 'iron': 'ironpython'}
キー追加 キー削除del キー一覧keys 存在確認has_key
-
例(1)
-
>>> month={1:'January',2:'February',3:'March',4:'April',5:'May',6:'June',7:'July',8:'August',9:'September', 10:'Octobe',11:'Nobember',12:'Desember'}
>>> month[1]
'January'
>>> month[7]
'July'
>>> del month[9]
>>> month{1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 10: 'Octobe', 11: 'Nobember', 12: 'Desember'}
例(2) 配列の重複を除く arry1=[5, 4, 7, 4, 5, 7, 3] 辞書にする
-
>>> array2={5:0,4:0,7:0,4:0,5:0,7:0,3:0}
>>> array2
{3: 0, 4: 0, 5: 0, 7: 0}
重複のないキーの文字列リストを得る
-
>>> print array2.keys()
[3, 4, 5, 7]
例(3)勘定科目表
-
(a) キー 勘定科目コード 値 科目名 101 : genkin >>> kamoku = {101:'genkin',102:"kogutigenkin",103:"touzayokin"}
>>> kamoku {101: 'genkin', 102: 'kogutigenkin', 103: 'touzayokin'}
>>> kamoku[101] 'genkin'
>>> kamoku[103] 'touzayokin'
>>> kamoku[104]='futuyokin'
>>> kamoku {104: 'futuyokin', 101: 'genkin', 102: 'kogutigenkin', 103: 'touzayokin'}
>>> del kamoku[104] >>> kamoku {101: 'genkin', 102: 'kogutigenkin', 103: 'touzayokin'}
>>> kamoku.keys() [101, 102, 103]
>>> kamoku.has_key(101) True
-
(b) キー 科目名 値 科目コード kosaihi : 731
>>> kamoku2 = {'kotuhi':728,'tusinhi':729,'kosaihi':731}
>>> kamoku2
{'kotuhi': 728, 'kosaihi': 731, 'tusinhi': 729}
>>> kamoku2['kotuhi']
728
例(4)生徒名簿 seito = {'taro':{'age':18,'height':170},'jiro':{'age':23,'height': 160}}
>>> seito
{'taro': {'age': 18, 'height': 170}, 'jiro': {'age': 23, 'height': 160}}
>>> seito['taro']
{'age': 18, 'height': 170}
辞書のペアの数を調べる
>>> len(seito)
2
ペアを追加する
>>> seito['saburo']={'age':26,'height':165}
結果を調べる
>>> seito
{'saburo': {'age': 26, 'height': 165}, 'taro': {'age': 18, 'height': 170}, 'jiro': {'age': 23, 'height': 160}}
例(5)比較
>>> d1 ={'a':1,'b':2,'c':3} >>> d2 ={'a':1,'b':2,'c':3} >>> print d1==d2 比較する
True
例(6)電話番号帳
>>> tel={'jack':4098,'sape':4139}
>>> tel['guido']=4137
>>> tel
{'sape': 4139, 'jack': 4098, 'guido': 4137}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv']=4127
>>> tel
{'jack': 4098, 'irv': 4127, 'guido': 4137}
>>> tel.has_key('guido')
True
>>> 'guido' in tel
True
例(7)土地評価計算
tm 土地面積
キー 1・・6 は土地番号
値 平方メートル
tr 土地路線値
キー 1・・6 は土地番号
値 万円
th 土地評価額
キー 1・・6 は土地番号
値 面積*路線価
>>> tm={1:0,2:0,3:0} tmを初期化 >>> tr={1:0,2:0,3:0} trを初期化 >>> th={1:0,2:0,3:0} thを初期化 >>> tm[1]=100 値を決定 >>> tm[2]=200 >>> tm[3]=300 >>> tr[1]=10 >>> tr[2]=20 >>> tr[3]=30 >>> th[1]=tm[1]*tr[1] >>> th[2]=tm[2]*tr[2] >>> th[3]=tm[3]*tr[3] >>> th 土地評価表 {1: 1000, 2: 4000, 3: 9000} >>> sum=th[1]+th[2]+th[3] >>> sum 14000 土地評価額合計
例(8)譲渡税
法人税等概算0.4とする
売価 原価 経費 その他
>>> jyouto={'baika':0,'genka':0,'keihi':0,'sonata':0} >>> jyouto['baika']=1800 >>> jyouto['genka']=100 >>> jyouto['keihi']=60 >>> jyouto['sonota']=1000 >>> jyouto {'sonota': 1000, 'baika': 1800, 'keihi': 60, 'genka': 100} >>> koujyo=jyouto['genka']+jyouto['keihi']+jyouto['sonota'] >>> koujyo 1160 >>> kazei=jyouto['baika']-koujyo >>> kazei 640 >>> hojinzei=kazei*0.4 >>> hojinzei 256.0 譲渡に対する法人税住民税概算
例(9)役員退職金
勤続年数 給与 功績倍率
>>> taisyoku={'kinzokunen':0,'kyuyo':0,'bairitu':0} >>> taisyoku=['kinzokunen']=42
>>> sikyu=taisyoku['kinzokunen']*taisyoku['kyuyo']*taisyoku['bairitu'] >>> taisyoku['kyuyo']=8 >>> taisyoku['kinzokunen']=42 >>> taisyoku['bairitu']=3 >>> sikyu=taisyoku['kyuyo']*taisyoku['kinzokunen']*taisyoku['bairitu'] >>> sikyu 1008 退職金支給枠
(10)配偶者控除
配偶者控除の条件 合計所得38万円以下 非該当時の負担増額のリスト
>>> haigu_ko={195:6.2,330:7.1,695:10.9,900:12.04,1800:15.84,'1800cho':18.5} # 配偶者控除非該当時の負担増:所得税法:合計所得38万円超街頭:単位万:以下:値は負担増金額 >>> haigu_ko.values() [6.2000000000000002, 12.039999999999999, 15.84, 7.0999999999999996, 10.9, 18.5] >>> haigu_ko.keys() [195, 900, 1800, 330, 695, '1800cho'] >>> haigu_ko {195: 6.2000000000000002, 900: 12.039999999999999, 1800: 15.84, 330: 7.0999999999999996, 695: 10.9, '1800cho': 18.5}
・・・・するには(ディクショナリの文法)
1・ディクショナリの要素数をしらべる len()
>>> arr2={'aa':100,'bb':200,'cc':300}
>>> len(arr2) 3
ある値を持つ要素のキーを取得するには ?
2・キー文字列のリストを取得する(キー一覧取得) .keys()
>>> arr2.keys() ['aa', 'cc', 'bb']
3.あるキーの存在を確認するには .has_key()
>>> arr2.has_key('cc') True >>> arr2.has_key('dd') False
>>> 'aa' in arr2.keys() True
4・キーを使って要素を追加する [ ] =
>>> arr2['dd']=400 >>> arr2 {'aa': 100, 'cc': 300, 'dd': 400, 'bb': 200}
5・キーを使って要素を削除する del( [ ] )
>>> del(arr2['cc']) >>> arr2 {'aa': 100, 'dd': 400, 'bb': 200} >>> >>> 6・辞書に登録されているすべての要素を列挙する for in keys() print
>>> for k in arr2.keys(): print k ,'=',arr2[k]
aa = 100 dd = 400 bb = 200
>>> for k in arr2: print k ,'=',arr2[k]
aa = 100 dd = 400 bb = 200
7.キーに割り当てられた値を取り出す .get()
>>> arr2.get('dd') 400
>>> arr2.get('ff') 存在しない場合は何も表示されない
>>> arr2.get('ff','test') そこで、testと表示されるようにする。 'test’
8.引数で指定する要素を組み合わせる update()
キーが存在しない場合は追加され、存在する場 合は上書きされる。
>>> arr2.update({'dd':400,'cc':200}) >>> arr2 {'aa': 100, 'cc': 200, 'dd': 400, 'bb': 200}
9・キーに割り当てられた値を求める .setdefault( )
>>> arr2.setdefault('dd') 400
10・存在しないキーを指定する .setdefault( )
>>> arr2.setdefault('gg') >>> arr2 {'aa': 100, 'cc': 200, 'dd': 400, 'gg': None, 'bb': 200} 「None」が値として追加される
11・存在しないキーと値を指定する
>>> arr2.setdefault('hh',600) .setdefault( )
600 >>> arr2 {'aa': 100, 'bb': 200, 'cc': 200, 'dd': 400, 'gg': None, 'hh': 600} >>>
12.キーと値をタプルとして取り出す .items()
>>> arr2.items() [('aa', 100), ('bb', 200), ('cc', 200), ('dd', 400), ('gg', None), ('hh', 600)]
13.登録されている値をリストにして返す .values()
>>> >>> arr2.values() [100, 200, 200, 400, None, 600]
14arr2に登録されている値をキーから検索する。 [ ]
>>> arr2['aa'] 100 >>> arr2['cc'] 200
15・arr2の全要素を削除する .clear()
>>> arr2.clear() >>> arr2 {} >>>
16デイクショナリのkeyをソートするには .keys() .sort()
デイクショナリはシーケンスではないのでソートできない。ディクショナリからキーのシーケンスを作ってそのシーケンスをソートする。
arr2.keys() ['aa', 'cc', 'dd', 'bb'] >>> s=arr2.keys() >>> s ['aa', 'cc', 'dd', 'bb'] >>> s.sort() >>> s ['aa', 'bb', 'cc', 'dd']
file dicsortで保存したファイルを開いて
seito = {'taro':{'age':18,'height':170},'jiro':{'age':23,'height': 160}}
s=seito.keys() s.sort() print s
['jiro', 'taro'] >>>
17 コピーを作るには import copy copy.copy()
>>> import copy >>> ls1 =[1,2,3] >>> ls2=(ls1) >>> ls1[0]=100 >>> ls1 [100, 2, 3] >>> ls2 [1, 2, 3]
(9)ディクショナリのループテクニック
iteritem()を使う
>>> nations={'japan':'asia','france':'yurope','congo':'africa'} >>> for k ,v in nations.iteritems(): print k,v
japan asia congo africa france yurope
(10)デイクショナリで多次元配列を表現する
IDLE 1.2.2 >>> matrix={} >>> matrix[(2,3,4)]=88
>>> matrix[(7,8,9)]=99 >>> x=2;y=3;z=4 >>> matrix[(x,y,z)] 88 >>> matrix {(2, 3, 4): 88, (7, 8, 9): 99} >>>
>>> matrix.get((2,3,4)) 88 >>> matrix.get((2,3,4),0) 存在すれば値を抽出してリターン 88 >>> matrix.get((2,3,6),0) 存在しなければデフォルトの値を指定 0
一人の人物の属性をディクショナリに組み込む
>>> member1 = {'name':'mori','job':['trainer','writer'],'tel':'000-800-0000'}
>>> member1['name'] 'mori' >>> member1['job'] ['trainer', 'writer'] >>> member1['tel'] '000-800-0000' >>>
マップの演算
| 演算子 |
結果 |
注 |
| |
|
|
dict() dict(**kwargs) dict(iterable) dict(d)
|
空の辞書を作成する。 キーワード引数 kwargs で初期化した辞書を作成する。 iterable から得られる (キー, 値) の組で初期化した辞書を作成する。 辞書 d のコピーを作成する |
|
| d.fromkeys(iterable, value=None) |
iterator から得られるキーを元に辞書を作成し、値を value に設定する |
|
|
|
(1) |
|
|
|
|
|
(1) |
|
|
|
| d.copy() |
d の(浅い)コピーを返す |
|
|
|
|
|
|
(2) |
|
|
(2) |
|
|
|
|
|
(2) |
|
|
(3) |
|
|
(4) | < |