Python習得中 – その2 このエントリーをはてなブックマークに追加

Python 習得中です。今日は 3章の 3.2.16 まで。

list コンストラクタに文字列を渡すと一文字ずつに分解してリスト化する

>>> list('cat')
['c', 'a', 't']

率直に言って気持ち悪いですね(´・ω・`)

タプルも同じですか。

>>> tuple('cat')
('c', 'a', 't')

素直に [] とか () とか使えって話ですね。

[0] はいくつでも重ねられる

リストのリストをいじっていて気づいたのですが、

>>> arr = [['foo', 'bar', 'baz'], ['hoge', 'fuga', 'piyo'], [1, 2, 3]]
>>> arr[0]
['foo', 'bar', 'baz']
>>> arr[0][0]
'foo'
>>> arr[0][0][0]
'f'

ここまではわかるのですが、

>>> arr[0][0][0][0]
'f'

あ、これできちゃうんだ、と。

確かに、文字列のオフセット位置を指定して抽出した文字も型としては同じ str 型なので当然と言えば当然なのですが、なんだかもにょる…(´・ω・`)

リストから同値の要素を除去する remove() メソッドの挙動

リストの先頭から検索して最初に hit した要素を削除する。 hit するものがないとエラーになる

>>> arr = ['foo', 'bar', 'baz', 'bar', 'qux', 'quux']
>>> arr
['foo', 'bar', 'baz', 'bar', 'qux', 'quux']
>>> arr.remove('bar')
>>> arr
['foo', 'baz', 'bar', 'qux', 'quux']
>>> arr.remove('bar')
>>> arr
['foo', 'baz', 'qux', 'quux']
>>> arr.remove('bar')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

…使いみちあるの? これ(´・ω・`)

index() メソッドも hit しないとエラーになる。先に in 演算子でテストしておかないとダメってことやね。

>>> arr = ['foo', 'bar', 'baz', 'bar', 'qux', 'quux']
>>> arr.index('bar')
1
>>> arr.remove('bar')
>>> arr
['foo', 'baz', 'bar', 'qux', 'quux']
>>> arr.index('bar')
2
>>> arr.remove('bar')
>>> arr
['foo', 'baz', 'qux', 'quux']
>>> arr.index('bar')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'bar' is not in list

== 演算子でリストの内容を比較できちゃう?

join() メソッドに関するサンプルを試していて思ったのですが…

>>> arr = ['foo', 'bar', 'baz']
>>> sep = ':'
>>> joined = sep.join(arr)
>>> joined
'foo:bar:baz'
>>> separated = joined.split(sep)
>>> separated
['foo', 'bar', 'baz']
>>> separated == arr
True

ものすごく当たり前のことのように配列同士で比較が行われていてすげぇーってなりました…。

>>> arr1 = ['foo', 'bar', 'baz']
>>> arr2 = ['foo', 'bar', 'baz']
>>> arr1 == arr2
True
>>> arr1 = [['foo', 'bar', 'baz'], ['hoge', 'fuga', 'piyo']]
>>> arr2 = [['foo', 'bar', 'baz'], ['hoge', 'fuga', 'piyo']]
>>> arr1 == arr2
True
>>> arr3 = [['foo', 'bar', 'baz'], ['hoge', 'fuga', 'poyo']] #ちょこっと違う
>>> arr1 == arr3
False

階層深くしてもちゃんと比較してくれてますね…。

2017 年 2 月 22 日 by 村山 俊之

タグ:

コメントをどうぞ