Python heapqのソートリストが間違っていますか?

dingo_d

セクション、サブセクション、サブサブセクションの番号と名前を含む1つのリストにリストを並べ替えようとしています。プログラムは次のようになります。

import heapq

sections = ['1. Section', '2. Section', '3. Section', '4. Section', '5. Section', '6. Section', '7. Section', '8. Section', '9. Section', '10. Section', '11. Section', '12. Section']
subsections = ['1.1 Subsection', '1.2 Subsection', '1.3 Subsection', '1.4 Subsection', '2.1 Subsection', '4.1 My subsection', '7.1 Subsection', '8.1 Subsection', '12.1 Subsection']
subsubsections = ['1.2.1 Subsubsection', '1.2.2 Subsubsection', '1.4.1 Subsubsection', '2.1.1 Subsubsection', '7.1.1 Subsubsection', '8.1.1 Subsubsection', '12.1.1 Subsubsection']

sorted_list = list(heapq.merge(sections, subsections, subsubsections))

print(sorted_list)

私が得たのはこれです:

['1. Section', '1.1 Subsection', '1.2 Subsection', '1.2.1 Subsubsection', '1.2.2 Subsubsection', '1.3 Subsection', '1.4 Subsection', '1.4.1 Subsubsection', '2. Section', '2.1 Subsection', '2.1.1 Subsubsection', '3. Section', '4. Section', '4.1 My subsection', '5. Section', '6. Section', '7. Section', '7.1 Subsection', '7.1.1 Subsubsection', '8. Section', '8.1 Subsection', '12.1 Subsection', '8.1.1 Subsubsection', '12.1.1 Subsubsection', '9. Section', '10. Section', '11. Section', '12. Section']

私の12番目のサブセクション、およびサブサブセクションは、12番目ではなく8番目のセクション内にあります。

なんでこんなことが起こっているの?元のリストはソートされており、すべてうまくいき、明らかに10番までです。

なぜこれが起こっているのかわかりませんが、リスト内の番号に基づいてこれを「ツリー」に分類する方法はありますか?ある種の目次を作成していますが、これが返されます(リストを除外すると)

1. Section
    1.1 Subsection
    1.2 Subsection
        1.2.1 Subsubsection
        1.2.2 Subsubsection
    1.3 Subsection
    1.4 Subsection
        1.4.1 Subsubsection
2. Section
    2.1 Subsection
        2.1.1 Subsubsection
3. Section
4. Section
    4.1 My subsection
5. Section
6. Section
7. Section
    7.1 Subsection
        7.1.1 Subsubsection
8. Section
    8.1 Subsection
    12.1 Subsection
        8.1.1 Subsubsection
        12.1.1 Subsubsection
9. Section
10. Section
11. Section
12. Section

8.1サブセクションの背後にある12.1サブセクションと8.1.1サブサブセクションの背後にある12.1.1サブサブセクションに注意してください。

Kasravnd

他の回答で説明されているように、並べ替え方法を指定する必要があります。そうしないと、Pythonは文字列を辞書式に並べ替えます。あなたが使用することができ3.5+のpythonを使用している場合keyには、引数をmergePythonで、機能3.5インチを使用できitertools.chainかつsorted:、および一般的なアプローチとして、あなたは、番号を検索し、int型に変換するために、正規表現を使用することができます

In [18]: from itertools import chain
In [19]: import re
In [23]: sorted(chain.from_iterable((sections, subsections, subsubsections)),
                key = lambda x: [int(i) for i in re.findall(r'\d+', x)])
Out[23]: 
['1. Section',
 '1.1 Subsection',
 '1.2 Subsection',
 '1.2.1 Subsubsection',
 '1.2.2 Subsubsection',
 '1.3 Subsection',
 '1.4 Subsection',
 '1.4.1 Subsubsection',
 '2. Section',
 '2.1 Subsection',
 '2.1.1 Subsubsection',
 '3. Section',
 '4. Section',
 '4.1 My subsection',
 '5. Section',
 '6. Section',
 '7. Section',
 '7.1 Subsection',
 '7.1.1 Subsubsection',
 '8. Section',
 '8.1 Subsection',
 '8.1.1 Subsubsection',
 '9. Section',
 '10. Section',
 '11. Section',
 '12. Section',
 '12.1 Subsection',
 '12.1.1 Subsubsection']

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonが間違ったリストに追加されていますか?

分類Dev

Pythonバブルソートの再帰。私は何が間違っているのですか?

分類Dev

Python多項式回帰のプロットが間違っていますか?

分類Dev

Pythonの指数プロットが間違っています

分類Dev

Python:matplotlibヒストグラムのビン番号が間違っています

分類Dev

TypeError:リストをPython関数に渡すときに引数の数が間違っています

分類Dev

opencvcmakeインストールのPythonパッケージパスが間違っています

分類Dev

MySQL / Python->ステートメントのプレースホルダーの構文が間違っていますか?

分類Dev

Pythonのタイムゾーンオフセットが間違っていますか?

分類Dev

自作のサブパッケージに自作のPythonクラスをインポートする際にどこが間違っていますか?

分類Dev

Python-スクリプトは間違ってカウントされますが、なぜですか?

分類Dev

PYTHON 私が間違っていることは何ですか? ループと if ステートメント

分類Dev

Pythonスクリプトでcondaからパッケージを間違ってインポートしていますか?

分類Dev

Pythonのイントロソート、誰かが私の間違いを指摘できますか?

分類Dev

Pythonインポートモジュール、正確に何が間違っているかを調べます

分類Dev

Pythonでの数学が間違っていますか?

分類Dev

Python math.arctan()の結果が間違っていますか?

分類Dev

Python-引数の数が間違っていますか?

分類Dev

Pythonソケットが間違ったポートを取得している

分類Dev

インデックス/オフセットのパフォーマンスがひどい-何が間違っているのですか?Python

分類Dev

Python文字列ループの出力が間違っています

分類Dev

Pythonクリアリストが間違ったリストをクリアしますか?

分類Dev

Pythonの多次元リストの乗算(連結)でこれが間違っているのはなぜですか?

分類Dev

Pythonでガウス関数のフーリエ変換をプロットしましたが、結果は間違っていました

分類Dev

ファイルstatus_codeから読み取られたPythonリクエストが間違っています

分類Dev

ソートスクリプトの構文が間違っていますか?

分類Dev

vscodeでPythonコードとjupyter拡張機能を実行すると、現在の作業ディレクトリが間違っています

分類Dev

Pythonの検索パスが間違っていますが、Windowsのみです

分類Dev

Pythonスクリプトの何が問題になっていますか?

Related 関連記事

  1. 1

    Pythonが間違ったリストに追加されていますか?

  2. 2

    Pythonバブルソートの再帰。私は何が間違っているのですか?

  3. 3

    Python多項式回帰のプロットが間違っていますか?

  4. 4

    Pythonの指数プロットが間違っています

  5. 5

    Python:matplotlibヒストグラムのビン番号が間違っています

  6. 6

    TypeError:リストをPython関数に渡すときに引数の数が間違っています

  7. 7

    opencvcmakeインストールのPythonパッケージパスが間違っています

  8. 8

    MySQL / Python->ステートメントのプレースホルダーの構文が間違っていますか?

  9. 9

    Pythonのタイムゾーンオフセットが間違っていますか?

  10. 10

    自作のサブパッケージに自作のPythonクラスをインポートする際にどこが間違っていますか?

  11. 11

    Python-スクリプトは間違ってカウントされますが、なぜですか?

  12. 12

    PYTHON 私が間違っていることは何ですか? ループと if ステートメント

  13. 13

    Pythonスクリプトでcondaからパッケージを間違ってインポートしていますか?

  14. 14

    Pythonのイントロソート、誰かが私の間違いを指摘できますか?

  15. 15

    Pythonインポートモジュール、正確に何が間違っているかを調べます

  16. 16

    Pythonでの数学が間違っていますか?

  17. 17

    Python math.arctan()の結果が間違っていますか?

  18. 18

    Python-引数の数が間違っていますか?

  19. 19

    Pythonソケットが間違ったポートを取得している

  20. 20

    インデックス/オフセットのパフォーマンスがひどい-何が間違っているのですか?Python

  21. 21

    Python文字列ループの出力が間違っています

  22. 22

    Pythonクリアリストが間違ったリストをクリアしますか?

  23. 23

    Pythonの多次元リストの乗算(連結)でこれが間違っているのはなぜですか?

  24. 24

    Pythonでガウス関数のフーリエ変換をプロットしましたが、結果は間違っていました

  25. 25

    ファイルstatus_codeから読み取られたPythonリクエストが間違っています

  26. 26

    ソートスクリプトの構文が間違っていますか?

  27. 27

    vscodeでPythonコードとjupyter拡張機能を実行すると、現在の作業ディレクトリが間違っています

  28. 28

    Pythonの検索パスが間違っていますが、Windowsのみです

  29. 29

    Pythonスクリプトの何が問題になっていますか?

ホットタグ

アーカイブ