Re: リスト内包表記キタコレ

a2cさんのブログに書いてあった Python に関するこの問題。
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
の配列を、リスト内包表記を使って次のように変換せよ。
[1, 2, 3, 4, 5, 6, 7, 8, 9]

前もって構造が分かっているという前提だと、こんな感じでしょうか。
List Comprehension を二重にするだけ。

>>> [x for y in arr for x in y]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
reduce()を使っていいならば、こっちのほうが自分は好きかも。
2.6からは使えなくなるみたいですが。
>>> reduce(lambda a,b: a+b, arr)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

リストが何重の入れ子になっているか分かっていない場合は、 List Comprehension だけでできるのかなぁ… 分かりません、誰か教えてください。


4 Comments so far »

  1.  

    shima_josw said

    on 2008-03-30 4:43 a.m.

    はじめましてこんにちは。
    少し前ですが、こういうの書きましたのでよかったら見てみてくださいー。
    http://d.hatena.ne.jp/shima_josw/2008012...

  2.  

    weboo said

    on 2008-03-30 10:02 a.m.

    shima_joswさん、はじめまして。

    Rubyだと、Array.flattenで済んじゃうので、関数を定義せずに List Comprehension だけで書けるといいなぁ、と思いました。とはいえ、ある程度の規模のプログラムを書く時は関数定義すればいいだけなので、そんなに問題じゃないですよね。

    ありがとうございました。参考にさせてもらいます。

  3.  

    tokibito said

    on 2008-03-31 9:46 a.m.

    reduceとlambdaを使う方法は関数型っぽくていいですねー。

  4.  

    weboo said

    on 2008-03-31 5:30 p.m.

    > tokibitoさん
    ですよね。reduce()をなくさないで欲しいです。


Leave a comment





このエントリーのはてなブックマーク (-)