这是我的代码:
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(也就是打印)。请注意,我没有从我用于循环的列表中删除。我也试过休息。如果删除“删除行”,打印将为我提供正确的输出。
答案 0 :(得分:3)
是的,您正在从您用于循环的列表中删除。因为copyFile
和csvFile
指向同一个列表对象。 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']