我需要从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。 –