fc2ブログ
リスト内包表記
Pythonでプログラムを書いているとき、リスト内包表記は、とても強力で、「あー、Pythonつかってて、よかったー」と、実感できる瞬間です。
最初出会ったときは、わかりにくかったですが、少し考えるといろいろと簡単に済むようになって便利です。
たとえば、2次元配列(matrix)の頭1列を取り出したいときは、
col = [ val[0] for val in matrix]
と書けばいい。任意の列を取り出したければ、
col_pick = lambda i:[val[i] for val in matrix]
としておけば、
col_pick(0)
で同じ結果が得られます。
1次元の配列(array)から、重複のない2個の組み合わせを取り出すには、
combi = [(array[i],array[j]) for i in range(len(array)) for j in range(i+1,len(array))]
と書けばいいわけです。
ちなみに、同じことをたとえばJavaで書くと、(arrayはIntegerを格納したList型だとして)
List<Integer[]> combi = new ArrayList<Integer[]>();
for( int i = 0 ; i < array.size();i++){
  for( int j = i + 1; j < array.size(); j++){
    combi.add( new Integer[] {array.get(i),array.get(j)} );
  }
}
ま、やってることはおんなじだけど、このコードを書かなければならないときに感じるストレスがぜんぜん違う。そこに大きな意味があるかなと思ってます。
スポンサーサイト



【2006/11/09 19:33】 | Python | トラックバック(0) | コメント(1) | page top↑
<<Dynabook C8故障 | ホーム | ダイクストラ法ですべての最短経路を求める>>
コメント
>1次元の配列(array)から、重複のない2個の組み合わせを取り出す

1次元の配列(array)から、添え字に重複のない2個の組み合わせを取り出す

だと思います。

いずれにしても、ここまでくるとちょっと苦しいのではないでしょうか。

単に、
Subsets[array, {2}]
のほうが、書く方にも読む方にもやさしいと思います。
【2010/03/14 23:10】 URL | yabuki #-[ 編集] | page top↑
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://tanopy.blog79.fc2.com/tb.php/5-38a8307c
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |