0

这是我的代码:

csvFile = [a,b,c,d,e,...]
brandList = [a,c,e,...]
copyFile = csvFile

for i in csvFile:
    for j in List2:
        if ' '+j.lower()+' ' in ' '+i.lower()+' ':
            print j.lower(), ' ',i.lower()
            copyFile.remove(i)

但是,在删除一个项目后,该过程会跳过一个项目。因此,在 [a,b,c,d,e] 列表中删除 c 将完全跳过 d (也是打印)。请注意,我没有从用于循环的列表中删除。我也试过休息。如果您删除“删除线”, print 会给我正确的输出。

4

2 回答 2

3

是的,您正在从用于循环的列表中删除。因为copyFilecsvFile指向同一个列表对象。Python 具有纯引用语义,因此赋值使新变量指向与右手表达式相同的对象,而不是深拷贝。

如果要复制,请构建一个新列表:

copyFile = list(csvFile)
于 2013-08-21T07:44:57.850 回答
1

看起来你可以使用具有多个条件和单词边界的正则表达式,因此它只能找到整个单词,然后将其用作 a 的一部分filter来重新创建一个新的匹配列表:

import re

base_items = ['a', 'b', 'c', 'the quick letter a jumped over the dog', 'eeeeee I no match...']
look_for = ['a', 'c', 'e']
rx = re.compile(r'\b({})\b'.format('|'.join(re.escape(item) for item in sorted(look_for, key=len, reverse=True))))
res = filter(rx.search, base_items)
# ['a', 'c', 'the quick letter a jumped over the dog']
于 2013-08-21T07:50:42.890 回答