Python 学習:インデックスソート

2014-04-07 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、2、0、2、1、 1、0、0、1、0(39)で、換算ポイント 58pt 。
「電波法」今朝方、9位にアップ。
「FM COCOLO」昨日夕方、4位にダウン。
・-・ - -・

さて、本文。

Python で、“ソート”=“並べ替え”をやる方法を調べていたら、

映像奮闘記: Pythonのソートについて:sort()とsorted()
を見つけた。

  ・・・・・
  pythonでソートを行おうとする場合、
  リストに組み込まれている関数list.sort()と、
  単独で使える関数sorted()の2つがある。
  基本的に取る引数は同じなので機能自体はあまり変わりないのだが、
  以下の2点が異なる。

  ・ sort()関数は返り値を出さずに、リストの本体自体を変更してしまう。
    これはreverse()関数と同じ。
  ・ sort()関数はソートの対象がリストであるのに対し、
    sorted()関数は対象がイテレータとなる。

  試しにpython上で確認してみる。
  ・・・・・

「sort()」と「sorted()」???
ヤヤコシイ。

「sort()」は使わないかナ?

<紙>的には、「sorted()」

それで、確認。

x = [ 1, 6, 3, 8, 4 ]
y = sorted(x)
print y # <========= [ 1, 3, 4, 6, 8 ]

納得。

これで、1次元(?)で、値そのものを並べ替えることは出来る。


それでは、
所謂“インデックスソート”はどうやる?

「Stack Overflow」にQ&Aがある。
how to return index of a sorted list?

回答の32番:
  You can use the python sorting functions' key parameter
  to sort the index array instead.

>>> s = [2, 3, 1, 4, 5]
>>> sorted(range(len(s)), key=lambda k: s[k])
[2, 0, 1, 3, 4]
>>>

とある。

これだと、

x = [ 1, 6, 3, 8, 4 ]
t = sorted( range(len(x)), key=lambda k: x[k] )
# ----- t[] はインデックス
# ----- 実際の並べ替え結果は、
y = [x[t[i]] for i in range(len(x))]

となりますね。
つまり、
't' の要素は、'x' の要素を並べ替えたときの、'x'の要素番号。


序でに、多次元でのソートは???
「P-diary」に、
Python : 多次元配列の要素でのソート
がある。
これは、「list.sort」だが。


あとは、「Python 2.7ja1 documentation」の
ソート HOW TO
での学習でしょうか。

「Key 関数」「operator モジュール関数」「昇順と降順」
のほか、
「cmp パラメータを利用した古い方法」

 ・ロケールに注意したソートをするには・・・
なども載っている。


更なる、Python の学習です。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140221
関連記事
スポンサーサイト

コメントの投稿

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

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク