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

アレックス・クリオリン

xml フィールドから長いテキスト文字列を組み立てる必要があります。

XML_FIELD_ONE = "Iamacatthatisoddlyimmunetocatnip"

XML_FILED_TWO = [7,8,24]

FILED_TWO には、\n または \r を挿入するインデックスが含まれています。2 つのインデックスが 1 離れている場合 (7、8 など)、\r\n を挿入する必要があります。インデックスがソロの場合 (24 など)、\n を挿入する必要があります。

このコードで 25K 行のファイルを処理するには、約 2 分かかります。私は何が間違っているのですか?

XML_FIELD_ONE = list("Iamacatthatisoddlyimmunetocatnip")
XML_FILED_TWO = [7,8,24]

idx = 0
while idx <= len(XML_FIELD_ONE):
   for position in XML_FIELD_ONE:
       for space in XML_FIELD_TWO:

             if idx == int(space) and idx+1 == int(space)+1:
               XML_FIELD_ONE[idx] = "\r"

                        try:
                            XML_FIELD_ONE[idx+1] = "\n"
                        except:
                            pass

              elif idx == int(space):
                 XML_FIELD_ONE[idx] = "\n"

    idx += 1


new_text = "".join(XML_FIELD_ONE)
return new_text

これを行う簡単な方法は次のとおりです。

for offset in XML_FILED_TWO:
    XML_FILED_ONE[offset] = \n

しかし、これは「2 つのオフセットが一緒の場合、最初のオフセットは \r、次のオフセットは \n」に違反します。

プルーン

1 つだけ必要なときにトリプル ループを作成しました。これは恐ろしく非効率です。新しいアイテムを挿入する場所を正確に知っています。場所を見つけるために 2 つのカウンターをインクリメントする代わりに、直接そこに移動します。

どこに挿入が必要なのか正確にはわかりませんが、これは近いはずです。元のインデックスを正しく保つには、右端から挿入して左に移動する必要があります。そのため、XML_FIELD_TWOを逆にします。

デバッグ用の print ステートメントを残しました。

XML_FIELD_ONE = list("Iamacatthatisoddlyimmunetocatnip")
XML_FIELD_TWO = [7,8,24]

print XML_FIELD_ONE
XML_FIELD_TWO = XML_FIELD_TWO[::-1]
print XML_FIELD_TWO
i = 0
while i < len(XML_FIELD_TWO):
    print i, XML_FIELD_TWO[i]
    if XML_FIELD_TWO[i] - XML_FIELD_TWO[i+1] == 1:
        XML_FIELD_ONE.insert(XML_FIELD_TWO[i], '\r\n')
        i += 2
    else:
        XML_FIELD_ONE.insert(XML_FIELD_TWO[i], '\n')
        i += 1

    print "\n", ''.join(XML_FIELD_ONE)

出力:

['I', 'a', 'm', 'a', 'c', 'a', 't', 't', 'h', 'a', 't', 'i', 's', 'o', 'd', 'd', 'l', 'y', 'i', 'm', 'm', 'u', 'n', 'e', 't', 'o', 'c', 'a', 't', 'n', 'i', 'p']
[24, 8, 7]
0 24

Iamacatthatisoddlyimmune
tocatnip
1 8

Iamacatt
hatisoddlyimmune
tocatnip

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

MySQL更新クエリのパフォーマンスが低い-インデックスが間違っていますか?

分類Dev

ここで何が間違っているのですか?~~ PythonのTkinter

分類Dev

ラムダで何が間違っているのですか

分類Dev

関数で何が間違っているのですか?

分類Dev

私はSedで何が間違っているのですか

分類Dev

Python3-ここで何が間違っているのですか?

分類Dev

jQueryの追加-何が間違っているのですか?

分類Dev

たとえばJavaと比較してF#のパフォーマンスが悪い。私は何が間違っているのですか?

分類Dev

パーリンノイズ-何が間違っているのですか?

分類Dev

JSON.parse、何が間違っているのですか?

分類Dev

消防署-私は何が間違っているのですか?

分類Dev

Java静的変数、何が間違っているのですか?

分類Dev

JComboBox。私は何が間違っているのですか?

分類Dev

Matlab:何が間違っているのですか?(索引付け)

分類Dev

Angular2、何が間違っているのですか?

分類Dev

javascript-私は何が間違っているのですか?

分類Dev

SQLインデックスのパフォーマンス、、どちらが良いですか?

分類Dev

TFSアクセス許可-何が間違っているのですか?

分類Dev

スタイルシートをhtmlにリンクする-何が間違っているのですか?

分類Dev

XMLスキーマ-何が間違っているのですか?

分類Dev

このクラスコンストラクターで何が間違っているのですか?

分類Dev

コンパイラは到達不能ステートメントがあると言っていますが、何が間違っているのですか?

分類Dev

ディスクの管理スナップインが無効になっているWindows8でセカンダリHDDをフォーマットする

分類Dev

インデックススキャンの不可解なパフォーマンス。結果セットが小さく、インデックスが作成されているのに、インデックスのスキャンが遅いのはなぜですか

分類Dev

SQLの更新、設定、ケース:何が間違っているのですか?

分類Dev

sklearnSVMのパフォーマンスがひどく悪い

分類Dev

Python IndexError:文字列インデックスが範囲外です-何が間違っていますか?

分類Dev

ひし形演算子によるJavaオブジェクトの初期化、ひどいjavacコンパイル時のパフォーマンス

分類Dev

ターミナルでのシンボリックリンク(何が間違っているのですか?)

Related 関連記事

  1. 1

    MySQL更新クエリのパフォーマンスが低い-インデックスが間違っていますか?

  2. 2

    ここで何が間違っているのですか?~~ PythonのTkinter

  3. 3

    ラムダで何が間違っているのですか

  4. 4

    関数で何が間違っているのですか?

  5. 5

    私はSedで何が間違っているのですか

  6. 6

    Python3-ここで何が間違っているのですか?

  7. 7

    jQueryの追加-何が間違っているのですか?

  8. 8

    たとえばJavaと比較してF#のパフォーマンスが悪い。私は何が間違っているのですか?

  9. 9

    パーリンノイズ-何が間違っているのですか?

  10. 10

    JSON.parse、何が間違っているのですか?

  11. 11

    消防署-私は何が間違っているのですか?

  12. 12

    Java静的変数、何が間違っているのですか?

  13. 13

    JComboBox。私は何が間違っているのですか?

  14. 14

    Matlab:何が間違っているのですか?(索引付け)

  15. 15

    Angular2、何が間違っているのですか?

  16. 16

    javascript-私は何が間違っているのですか?

  17. 17

    SQLインデックスのパフォーマンス、、どちらが良いですか?

  18. 18

    TFSアクセス許可-何が間違っているのですか?

  19. 19

    スタイルシートをhtmlにリンクする-何が間違っているのですか?

  20. 20

    XMLスキーマ-何が間違っているのですか?

  21. 21

    このクラスコンストラクターで何が間違っているのですか?

  22. 22

    コンパイラは到達不能ステートメントがあると言っていますが、何が間違っているのですか?

  23. 23

    ディスクの管理スナップインが無効になっているWindows8でセカンダリHDDをフォーマットする

  24. 24

    インデックススキャンの不可解なパフォーマンス。結果セットが小さく、インデックスが作成されているのに、インデックスのスキャンが遅いのはなぜですか

  25. 25

    SQLの更新、設定、ケース:何が間違っているのですか?

  26. 26

    sklearnSVMのパフォーマンスがひどく悪い

  27. 27

    Python IndexError:文字列インデックスが範囲外です-何が間違っていますか?

  28. 28

    ひし形演算子によるJavaオブジェクトの初期化、ひどいjavacコンパイル時のパフォーマンス

  29. 29

    ターミナルでのシンボリックリンク(何が間違っているのですか?)

ホットタグ

アーカイブ