トップ «前の日記(2010-09-12(Sun)) 最新 次の日記(2010-09-16(Thu))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2010-09-13(Mon) 夜に降った雨のおかげで、わずか涼しいような気もしたり

zipって何だ

>>> list(zip([[1,2,3],[4,5,6]]))
[([1, 2, 3],), ([4, 5, 6],)]
>>> list(zip(*[[1,2,3],[4,5,6]]))
[(1, 4), (2, 5), (3, 6)]
 
>>> L = [ [x-2, x, x+2] for x in range(2,5)]
>>> L
[[0, 2, 4], [1, 3, 5], [2, 4, 6]]
>>> list(zip(L))
[([0, 2, 4],), ([1, 3, 5],), ([2, 4, 6],)]
>>> list(zip(*L))
[(0, 1, 2), (2, 3, 4), (4, 5, 6)]

やっぱり、分かったようで分からないようで...

イミュータブルのなかにミュータブル

t = (1, 2, ['first', 'second', 'third], 4)
 
>>> t
(1, 2, ['first', 'second', 'third'], 4)
 
>>> t[2][2] = 'SECOND'
>>> t
(1, 2, ['first', 'second', 'SECOND'], 4)
 
>>> t[3] = 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> 

逆(リストの中にタプルとか)も、もちろん可能である。
まぜるな危険、かどうかよくわからない。

enumerate

5.6の例題を内包表記でやってみた。

>>> foo = ['バナナ', '柿', '葡萄']
>>> [[x,y] for x,y in enumerate(foo)]
[[0, 'バナナ'], [1, '柿'], [2, '葡萄']]

この場合、(x, y) にしても {x : y} にしても通るようだった。
それより、元と似た解なら、新しい関数を使うまでもないかもしれない。

>>> for bar in list(foo): print(foo.index(bar),bar)
... 
0 バナナ
1 柿
2 葡萄

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。