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)} ); } } ま、やってることはおんなじだけど、このコードを書かなければならないときに感じるストレスがぜんぜん違う。そこに大きな意味があるかなと思ってます。 スポンサーサイト
|
>1次元の配列(array)から、重複のない2個の組み合わせを取り出す
1次元の配列(array)から、添え字に重複のない2個の組み合わせを取り出す だと思います。 いずれにしても、ここまでくるとちょっと苦しいのではないでしょうか。 単に、 Subsets[array, {2}] のほうが、書く方にも読む方にもやさしいと思います。 |
|
| ホーム |
|