追記
コメント欄で教えていただきました。id:podhmo さん、ひげさんありがとうございます。
>>>a.extend(b) [1, 2, 3, 4, 5, 6] >>>a.append(b) [1, 2, 3, [4, 5, 6]]
とてもわかりやすいので、今後僕は extend を使います。
見よう見まねで書いたコードで append すべきところで extend 使ってて、
その後 join してたから extend の挙動を完全に間違って覚えてました。
あと、+ でもいいみたいだけど、extend 使う方が意図が明確だし、
これは使わないかもしれない。
>>>a+b [1, 2, 3, 4, 5, 6]
Python での list の merge
python で list をマージしたい時はどうしたらいいんだろう。
考えるよりまずググる Google 脳なので、「python list merge」でググッたところ、こんな記法が目を引いた。
>>>a = [1,2,3] >>>b = [4,5,6] >>>[x for sublist in [a,b] for x in sublist] [1, 2, 3, 4, 5, 6]
気に入ったけど何のことかわからない。
重い腰を上げて考えます。
まずこの [x for sublist in [a,b]... 最初の x が意味わからない。
分解してみる。
>>> a = [1,2,3] >>> b = [4,5,6] >>> [x for sublist in [a,b]] Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined
そりゃそうだ。これは何となくわかる。
>>> [sublist for sublist in [a,b]] [[1, 2, 3], [4, 5, 6]]
OK、何となくわかった。
結果を想像しながら次。
>>> [a for sublist in [a,b]] [[1, 2, 3], [1, 2, 3]]
[] の先頭に最終的に list に代入させたいものを書けばよさげ。
>>> [sublist.pop(0) for sublist in [a,b]] [1, 4]
超便利!!
で、2個目の for の意味もよくわからない。
なんか何個でも for 書いていいみたいだけど。
(例)
>>> [x for sublist in [a,b] for hoge in sublist for x in [hoge]] [1, 2, 3, 4, 5, 6]
for 文以外書いたら怒られた。
ネズ本読んでたらその内教えてくれるだろうか。
普通に書くならこっちな気がする
もうちょっとググったらもっとわかりやすそうなの出てきた。
>>> from heapq import merge >>> a = [1,2,3] >>> b = [4,5,6] >>> list(merge(a,b)) [1, 2, 3, 4, 5, 6]
こういう時ってどうすればいいんだろう。
php 書く時なら迷わず下を選択するんだけど。