あいかわらず雰囲気で Python の勉強をしています。
今回の教材は プログラミング超初心者が初心者になるためのPython入門(2) リスト・タプル・ディクショナリ・if・for ループ編 。前回のヤツの続編。待望の第二弾。Kindle 価格250円ですが、やはりオーナーライブラリーの対象商品なので、Kindle端末があればタダで読めます(2017年7月現在)。ほんなこつありがたいです。
一度に覚えきれなかったので…ひとまず前編ということで、リストとタプルとディクショナリというヤツを勉強する。
リストを作ってみる
>>> x = ["Hello"] >>> print x ['Hello'] >>> print type(x) <type 'list'>
リストに複数の要素を入れてみる
>>> print ["a","b","c","d","e"] ['a', 'b', 'c', 'd', 'e'] >>> print ["a","b","c",1,2,3] #数値もOK ['a', 'b', 'c', 1, 2, 3] >>> print ["a","b",["c",1,2,3]] #リスト内にリストを入れることも可 ['a', 'b', ['c', 1, 2, 3]]
リスト内が入れ子になっている構造をネストと表現する。
リストのインデクシング
要素には(例によって)0から始まる連番が割り振られている。
>>> print ["a","b","c","d","e"][0] a >>> print ["a","b",["c",1,2,3]][2] ['c', 1, 2, 3] #インデックスを連続して指定することで、入れ子になっているリスト内の要素を取り出すこともできる。 >>> print ["a","b",["c",1,2,3]][2][0] c >>> print ["a","b",["c",["d","e"]]][2][1][0] #3重ネストの場合 d #マイナスの値を指定した場合、逆向きにインデクシングされる(0からではなく、-1から始まることに注意)。 >>> print ["a","b","c","d","e"][-1] e #存在しないインデックスを指定するとエラーになる。 >>> print ["a","b","c","d","e"][10] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
リストのスライシングをする
>>> print ["a","b","c","d","e"][0:3] ['a', 'b', 'c'] >>> print ["a","b","c","d","e"][3:] ['d', 'e'] >>> print ["a","b","c","d","e"][-5:-2] #マイナスのインデックス指定も可 ['a', 'b', 'c'] >>> print [0,1,2,3,4,5,6,7,8,9][0:9:2] #ひとつおきに取り出す場合 [0, 2, 4, 6, 8] >>> print [0,1,2,3,4,5,6,7,8,9][3:10:3] #ふたつおきに取り出す場合 [3, 6, 9] #インデクシングとスライシングを併用する >>> print ["a","b","c",[0,1,2,3]][3][1:3] [1, 2] #インデクシングを利用してリストの中身を変更する >>> x = ["a","b","c"] >>> x[1] = "BBB" >>> print x ['a', 'BBB', 'c']
リストに対するメソッド
append メソッド
リストに要素を追加する
>>> x = ["a","b","c"] >>> x.append("d") >>> print x ['a', 'b', 'c', 'd']
extend メソッド
リストを延長する
>>> x = ["a","b","c"] >>> x.extend(["d","e"]) >>> print x ['a', 'b', 'c', 'd', 'e'] #appendで同じことをやろうとすると、違う結果が出る。 >>> x = ["a","b","c"] >>> x.append(["d","e"]) >>> print x ['a', 'b', 'c', ['d', 'e']]
removeメソッド
リストの要素を削除する
>>> x = ["a","b","c"] >>> x.remove("b") >>> print x ['a', 'c'] # 指定した要素が複数あっても、最初の1個しか消えない >>> x = ["a","b","b","c"] >>> x.remove("b") >>> print x ['a', 'b', 'c']
delステートメント
インデックスの値で消去する要素を指定する。
delはメソッドではなくステートメント。文法が違う。お、おう……ちょっと混乱してきた。
>>> x = ["a","b","c"] >>> del x[1] >>> print x ['a', 'c'] >>> x = ["a","b","c"] >>> del x[1:] #スライシングで指定した場合 >>> print x ['a']
popメソッド
- リストに入っている最後のオブジェクトを消す。
- 消えたオブジェクトを戻す
……かなり混乱してきた。
>>> x = ["a","b","c"] >>> y = x.pop() >>> print x ['a', 'b'] >>> print y c >>> x = ["a","b","c"] >>> y = x.pop(0) #pop対象をインデックスで指定することも可能 >>> print x ['b', 'c'] >>> print y a
sort、reverseメソッド
sort:昇順に並べ替える
>>> x = ["c","d","a","b"] >>> x.sort() >>> print x ['a', 'b', 'c', 'd']
reverse:リストの要素を逆向きに並べ替える
>>> x = ["c","d","a","b"] >>> x.reverse() >>> print x ['b', 'a', 'd', 'c']
sortとreverseを組み合わせると、降順に並べ替えることが可能
>>> x = ["c","d","a","b"] >>> x.sort() >>> x.reverse() >>> print x ['d', 'c', 'b', 'a']
こういう工夫は嫌いじゃない。
リストを自動で作る
#list関数 文字列からリストを作る >>> print list("abc") ['a', 'b', 'c'] #range関数 >>> print range(5) [0, 1, 2, 3, 4] >>> print range(2,10) #2から9までのリストを作る [2, 3, 4, 5, 6, 7, 8, 9] >>> print range(2,10,2) #2から9までで、1個おきのリストを作る [2, 4, 6, 8]
タプルとリストの違い
リストに似ているが内容が変わりにくい。リストは内容を変更しやすいのがいいところでもあり、悪いところでもあり。
>>> type(("Hello","World")) <type 'tuple'> #append等のメソッドは使えない >>> x = ("a","b","c") >>> x.append("d") Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append'
ディクショナリを作ってみる
>>> print {"a":"apple"} {'a': 'apple'} >>> print type({"a":"apple"}) <type 'dict'> >>> print {"a":"apple","b":"ball","C":"cat"} {'a': 'apple', 'C': 'cat', 'b': 'ball'} # aというキーで、ディクショナリから値を取り出してみる >>> print {"a":"apple","b":"ball","C":"cat"}["a"] apple # キーは数字でもOK >>> print {1:"apple",2:"ball",3:"cat"}[2] ball # 値が数字でもOK >>> print {1:100,2:1000,3:10000}[3] 10000
ディクショナリに要素を加えたり減らしたりしてみる
>>> x = {"a":"apple","b":"ball","c":"cat"} >>> x["d"]= "dog" >>> print x {'a': 'apple', 'c': 'cat', 'b': 'ball', 'd': 'dog'} #既存のキーを指定した場合、キーに対応した値が置き換わる。 >>> x = {"a":"apple","b":"ball","c":"cat"} >>> print x {'a': 'apple', 'c': 'cat', 'b': 'ball'} >>> x["c"] = "cat2" >>> print x {'a': 'apple', 'c': 'cat2', 'b': 'ball'} #要素の削除は、リストと同様にdelステートメントが使える >>> x = {"a":"apple","b":"ball","c":"cat"} >>> print x {'a': 'apple', 'c': 'cat', 'b': 'ball'} >>> del x["c"] >>> print x {'a': 'apple', 'b': 'ball'}
ディクショナリに対するメソッド
popメソッド
使い方はリストのときと同じ
>>> x = {"a":"apple","b":"ball","c":"cat"} >>> y = x.pop("c") >>> print x {'a': 'apple', 'b': 'ball'} >>> print y cat #popには、そのキーが見つからないときに返す値も指定できる。 >>> print {"a":"apple","b":"ball","c":"cat"}.pop("b","Not Found") ball >>> print {"a":"apple","b":"ball","c":"cat"}.pop("d","Not Found") Not Found #キー"d"が見つからなかったので、Not Foundが返ってきた。
updateメソッド
ディクショナリの内容を更新する。
>>> x = {"a":"apple","b":"ball","c":"cat"} >>> x.update({"d":"dog","e":"egg"}) >>> print x {'a': 'apple', 'c': 'cat', 'b': 'ball', 'e': 'egg', 'd': 'dog'} #付け加える要素は変数に入れてもOK >>> x = {"a":"apple","b":"ball","c":"cat"} >>> y = {"d":"dog","e":"egg"} >>> x.update(y) >>> print x {'a': 'apple', 'c': 'cat', 'b': 'ball', 'e': 'egg', 'd': 'dog'} #既存のキーを指定した場合は、対応する値が更新される >>> x = {"a":"apple","b":"ball","c":"cat"} >>> y = {"c":"cat2","e":"egg"} >>> x.update(y) >>> print x {'a': 'apple', 'c': 'cat2', 'b': 'ball', 'e': 'egg'}
keys、values、itemsメソッド
keys = キーだけを出力する
>>> x = {"a":"apple","b":"ball","c":"cat"} >>> print x.keys() ['a', 'c', 'b'] # キーはリスト型で出力される→リストとして操作可能 >>> x = {"a":"apple","b":"ball","c":"cat"} >>> y = x.keys() >>> print y ['a', 'c', 'b'] >>> print x[y[0]] #インデクシングを使って、"a"に対応する値を表示させる apple
values = 値だけを出力する
>>> x = {"a":"apple","b":"ball","c":"cat"} >>> print x.values() ['apple', 'cat', 'ball']
items = キーと値に順番にアクセスしたいとき便利
>>> x = {"a":"apple","b":"ball","c":"cat"} >>> print x.items() [('a', 'apple'), ('c', 'cat'), ('b', 'ball')] #全体としてはリストで、キーと値はタプルで出力される
has_keyメソッド
ディクショナリに、特定のキーが含まれているかどうかを調べる。
has_keysではないことに注意。
>>> x = {"a":"apple","b":"ball","c":"cat"} >>> print x.has_key("a") True #値はTrueかFalseで返ってくる。
理解できなくはないんだけれど、さすがに混乱することが多くなってきた。メソッドとかステートメントとか、カタカナがいっぱい出てきてすごい。これが本物のプログラミングの世界なんだ……!

プログラミング超初心者が初心者になるためのPython入門(2) リスト・タプル・ディクショナリ・if・for ループ編
- 作者: たっく,ちょっぷ
- 発売日: 2015/03/16
- メディア: Kindle版
- この商品を含むブログを見る