【发布时间】:2017-05-25 11:49:43
【问题描述】:
我有 2 个列表。我想从列表中删除所有包含第二个列表中的字符串的项目。现在,我使用经典的 2 循环方法,第一个循环遍历主列表的副本,然后对于每个项目,我检查它是否包含来自第二个列表的任何字符串。然后,如果找到字符串,我将删除该项目。我可以用 break 结束第二个循环,因为不再需要查找(无论如何我们都会删除这一行)。这工作得很好 - 正如你所看到的,我正在迭代列表的副本,所以删除元素不是问题。
代码如下:
intRemoved = 0
sublen = len(mylist) + 1
halflen = sublen / 2
for i, line in enumerate(mylist[:], 1):
for item in REM:
if item.encode('utf8').upper() in line.text.encode('utf8').upper():
if i < halflen:
linepos = i
else:
linepos = (sublen - i) * -1
mylist.remove(line)
intRemoved += 1
break
现在,我需要数据我删除了多少行 (intRemoved) 和在列表中的位置(从列表的开头或列表的结尾,这就是它分成两半的原因)。正数表示从文件开头删除的行位置,负数表示从末尾开始。
啊,是的,我忽略了这个案子。这就是为什么有 .upper()。
现在,由于我绝不是专业人士,我只需要知道我是否做得对,就性能而言?我在做对性能不利的事情吗?有没有办法优化这个?
谢谢, D.
【问题讨论】:
-
询问优化问题的最佳地点是 codereview.stackexchange
-
我的建议:在比较之前标准化列表(大写)。排序也有帮助,不确定。
-
(1) linepos 似乎已计算但从未使用过 (2)
break表示为时过早 (3) 在考虑优化之前让它工作! -
我在后面的代码中使用它,但与本案无关
-
(1)
linepos似乎已计算但从未使用过。 (2)subSrt是什么? (3) 在考虑优化之前让它工作!
标签: python list optimization