Python入門(15/18)
**セクション15 **アプリケーションケース(3)
みなさん、こんにちは!昨日のケース分析では中毒がありましたが、今日は2次元データソートの比較的複雑なケースについて話すことに集中します。
いわゆる2次元データソート。Execlのデータテーブルのソートについては、誰もが印象に残るはずです。どの列でもソートできます。このようなデータテーブルは、典型的な2次元データであり、任意の列の高速ソートを実現できるため、日常業務に非常に便利です。したがって、このテーブルの並べ替え機能でプログラムコードを設計する必要がある場合は、どうすればよいでしょうか。
実際、2次元データのセットの場合、Pythonの組み込みの並べ替え機能に関係なく、データの1つの行または列の並べ替えは非常に簡単です。少なくとも、バブル並べ替えアルゴリズムを使用してそれらを取得できます。
ただし、問題は複雑です。データテーブルの行と列のデータは分離されていません。
各列は、異なるオブジェクトの同じ測定カテゴリの測定値を表します。通常、これをフィールドおよびフィールド値と呼びます。データテーブルの各行は、同じ測定オブジェクトと異なる測定カテゴリの測定値を表します。通常、行をレコードと呼び、同じ測定オブジェクトの異なる測定特性の測定値を格納します。
フィールドとレコードの意味を理解した後、その後の説明ははるかに簡単になります。
つまり、同じレコードの各フィールドの値がレコードの特定の特性を表している場合、特定の列の特定の値がこの列の並べ替えによって突然発生した場合、ランダムに移動することはできません。改行がありますが、それでも元のレコードの特定の特性を識別していますか?明らかにそうではありません、それはもはやその列にないので、それは他の人々の家の特徴になっています。
データを混乱させることなく、元のデータテーブル(つまり、2次元データ)のイデオグラフィック特性を維持する可能性は1つだけです。つまり、レコードの特定の列のデータが並べ替えによって位置を変更した場合、 、このレコードの他の列の位置も同期的に変更する必要があります。つまり、この行のデータレコードがまだ完全であるだけでなく、その変更による影響を受けないように、行全体が一緒に移行されます。他の行のデータレコードの場合、同じ行に属するすべてのデータは引き続き同じ行にあり、同じレコードに属します(他の人の家に行くことはありません)。
したがって、同様の問題(2次元データソート問題)を解決する方法を発見した可能性があります。これは、特定の列のソートであり、分離された列のソートではなく、データレコードの行全体の位置の同期移行です。
さて、これまでのところ、私たちはついに今日の事件に立ち向かう勇気を持っています。
ケース6。2次元データのセットは任意の列で並べ替えることができます
**要件:**データが次のとおりであると想定しています。
1,' a',2.35
5,' d',7.22
0,' c',8.99
3,' b',5.33
2,' e',6.99
任意の列で並べ替えてください。
需要分析
(1)5行3列のデータがあります。最初の列のデータは整数、2番目の列のデータは文字列、3番目の列のデータは小数です。 2次元リストを使用して、この2次元データのグループを表すことができます。2次元データの行は、リストのオブジェクト(要素)を構成します。したがって、リストには5つのオブジェクト(要素)が含まれます。
(2)ソートしたいのは行ではなく、列です。通常の状況では、同じタイプの特性値を1つの列に記録するため、それらは比較可能です。もちろん、実用的な重要性と比較可能性を考慮しない場合は、行で並べ替える必要があります。アルゴリズムのロジックは同じである必要があります。実際、すぐに行います。
(3)異なる行の同じ列のデータをソートできるようにするには(サイズを比較)、最初にこのリストのデータに対して行と列の変換を実行して、3行5列の2次元データにする必要があります。この変換には他の目的はありません。ソート操作を容易にするために、純粋に各列のデータをリスト内の独立した要素のペアにすることです。重要なことは、この変換によってデータ間の対応がまったく変更されないことです。
(4)並べ替えがうまくいったら、別の逆変換(もう1つの行-列変換)を実行しましょう。何か想像できますか?それが私たちが望む最終的なソート結果ではありませんか?
(5)したがって、最終的には、ランク変換後に新しい行のデータをどのようにソートするかに焦点が当てられます。同様に、2次元データでは、行の並べ替えも、関連する列の位置が前方に移動する問題である必要がありますか? OK、これを理解した後、物事は本当に簡単になります。リストオブジェクト自体の並べ替えは、並べ替え機能の問題であるため、1つのトリックで実行できます。
**さて、たくさん言って、それはおそらく少し頭が痛いです、本当に申し訳ありません。しかし、脳は良いものであり、誰もがそれを必要としないことを知っておく必要がありますが、それがうまく機能すれば、違いは大きくなります。燃やすほど、精神的になることを知っておく必要があります。栄光を燃やす! ****
任意の列に従って2次元データをソートするためのソースコードを以下に示します。
PS:初心者の理解を容易にするために、私たちは行ごとのコメントをしました。これは純粋に初心者の便宜のためです。通常の状況では、行ごとのコメントは少し叱られ、ありがたいことに注意してください。何故ですか?コードを読んだ人は、他人の「大きな牛」を「シャオバイ」と思っているかもしれないので、重要な位置にコメントを付けることができます。行ごとのコメントとはどういう意味ですか? 1行のコードを理解できませんか?あなたは素晴らしいです、私たちは皆馬鹿ですか?草...誇りや優越感を持っていないのは誰ですか?それを見て、それを見て、挑発されていない優しさはロバの肝臓と肺、ありがたい、そして不快な人々と見なされているので、世界は不吉です、兄弟!
コード分析:
1、 2次元データは、2次元リストリストとして定義できます。これは、実際にはネストされたリストです。つまり、リストの各要素は引き続きリストオブジェクトです。ただし、ネストされたリストを含むすべてのリストが2次元データであるとは限らないことに注意してください。なぜなら、ネストされた各リストが同じデータタイプであり、リストの長さが2次元データと見なすことができるかどうかを判断するための鍵となるからです。
2、 列の並べ替えを理解すると、データ構造が変更されないようにするために、列の並べ替えは実際には行の順序の調整として理解できます。
3、 ランクと列の変換を実現することは、運用の重要なポイントです。このことから、zip()関数のランク変換関数を考えました。zip(* list)関数を使用してリストデータをランク変換した後、列単位のタプルのリストが生成されるので、並べ替えに便利です。たくさん。
4、 重要な点は、指定された列要素に従ってソートした後、対応する他の列も同期位置の移行を受ける必要があるということです。より正確には、同期されたインデックスが変更されます。コード実装の詳細に注意してください。行と列の変換後、元の各列はタプルになります。このように、他の列は、指定された列がソートされた後のインデックス変更を参照するだけで、同じインデックス変更を実行できます。すべての列の同期更新を実現します。
5、 最後に、zip()関数を使用して復元し、2次元データを指定された列で並べ替えます。
概要
今日の共有の時点で、合計6つのPythonアプリケーション設計ケースがあります。これにより、シンプルでエレガント、そして素晴らしいpythonプログラミングの美しさを予備的に味わうことができました。
これまで、Pythonの最も基本的で一般的に使用される知識ポイントを共有してきました。
要件に固有の解決策はないことを強調しておく必要があります。さまざまな解決策を見つけて、メッセージ領域でフィードバックを提供してください。学習成果を統合するために、授業後にデザインのトピックを見つけ、脳と手をもっと使い、鉄の棒を針にすりつぶすと、自然に作業ができるようになることをお勧めします。
プレビュー
次に、非常に重要なpythonオブジェクト指向プログラミングを共有します。オブジェクト指向プログラミングの思考能力と方法を学んだことで、Pythonプログラミングレベルがさらに向上するだけでなく、マスターの領域に向けてさらに大きな一歩を踏み出すことができることは間違いありません。
Recommended Posts