-1

行を並べ替えたいとしましょう。次の列との関係、次の次の列との関係などを解決したいとします。

Python の言葉では、sorted(rows, key=itemgetter(1, 2, 3, 4, ...))と同等です。

独自のジェネレーターを作成しようとしましたが、タプル itemgetter が返すように、sorted がジェネレーターを反復処理しません。何かアドバイス?

4

2 に答える 2

1

コメントに記載されている理由により、まだ作成されていないもののリストを並べ替えることができません。ジェネレーターは、要求されたときに結果を生成するために存在するため、反復されていない iterable をソートすることはできません ( list(generator()).

より一般的な言い方をすれば、私は 10 人の名前を考えていますが、それらが何であるかはまだお伝えしていません。アルファベット順に並べ替えてください。「あなたが私にそれらを与えていないのに、どのようにそれらを分類できますか?」と答える必要があります。そしてあなたは正しいでしょう:あなたはできません。

于 2012-07-22T11:24:28.297 に答える
0

OK、あなたがやりたいことは次のとおりです。

行を並べ替えたいのですが、次の列との関係、次の次の列との関係などを解決したいと考えています。

まず、key引数のドキュメントでは次のことを行うことに注意してください。

keyは、各リスト要素から比較キーを抽出するために使用される 1 つの引数の関数を指定します

比較が等しい場合にのみリストを移動したいので、あなたのitemgetter考えはまったく正しくありません。

しかし、物事はあなたが思っているよりもはるかに簡単です。Python ドキュメントを確認してください(この SO の質問も参照してください)。

シーケンス型も比較をサポートしています。特に、タプルとリストは、対応する要素を比較することによって辞書編集的に比較されます。これは、等しいと比較するには、すべての要素が等しい必要があり、2 つのシーケンスが同じ型で同じ長さでなければならないことを意味します。(完全な詳細については、言語リファレンスの比較を参照してください。)

各行が同じ長さのシーケンス (リストまたはタプル) であることを確認するだけであれば、これはまさにあなたが望むものだと思います。

(ああ、キーを生成する関数に関するコメントを読んだところdie-rollです。混乱しています-その場合に上記が役立つかどうかはわかりませんが、あなたが求めていることが実際に意味があるかどうかはわかりません...)

于 2012-07-22T11:40:36.407 に答える