我需要從xml字段組裝一個長文本字符串。索引/偏移性能很糟糕 - 我做錯了什麼? Python
XML_FIELD_ONE = 「Iamacatthatisoddlyimmunetocatnip」
XML_FILED_TWO = [7,8,24]
FILED_TWO包含要插入任一\ n或\ r處的索引。 如果兩個索引相距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
但是這違反了 「如果兩個偏移在一起,第一個是用\ r,下一個是\ n」 個
這是不相關的,但是什麼時候將'idx == int(space)'設置爲True並且'idx + 1 == int(space)+ 1'不是真的?我錯過了什麼嗎?裸體「除外」是什麼?那些不好。你想抓住一個'IndexError'嗎?通常情況下,你應該嘗試明確地處理這些問題,或者糾正你的代碼,這樣就不會發生......老實說,我很難用你的代碼來描述它的功能......你不是插入*,可以這麼說,而是取代。而3個嵌套循環似乎完全沒有必要。 –
但是,爲了回答你的問題,你的算法在XML_FIELD_ONE的長度方面將是*最小*二次方,實際上,就我所知,它是O(m * n^2),其中'n = len(XML_FIELD_ONE)'和'm = len(XML_FIELD_TWO)'......似乎並不是正確的方法,因爲你描述了你正在努力完成的任務。 –
該空間只有7,8,24,這意味着它不會是真實的,除非你在索引7。含義索引7和8被替換爲7和8. 裸體除了是捕捉最後一個idx錯誤,是的。當您處於MAX指數時,您無法查看MAX指數+1。 –