列表在双循环中删除

时间:2013-08-21 07:38:58

标签: python

这是我的代码:

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(也就是打印)。请注意,我没有从我用于循环的列表中删除。我也试过休息。如果删除“删除行”,打印将为我提供正确的输出。

2 个答案:

答案 0 :(得分:3)

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

如果您想制作副本,请构建一个新列表:

copyFile = list(csvFile)

答案 1 :(得分:1)

它看起来像你可以使用具有多个条件的正则表达式和单词边界,因此它只能找到整个单词,然后将其用作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']