我试图通过为我的工作开发一些CLI工具来学习python。
我有两个域列表,一个"重复数据删除"保留我从文本文件加载的完整域名,另一个" poison"包含一些与某些域部分匹配的字符串。
deduplicated = ['facebook.com','google.com','en.wikipedia.org','youtube.com','it.wikipedia.org']
poison = ['youtube','wikipedia']
我试图匹配"毒药"字符串列表,以获得两个新的列表,一个"清除" (与毒药列表不匹配的域名)和一个"脏" (部分匹配")。
这是我的尝试,但它不起作用......
clean = []
dirty = []
for item in deduplicated:
if (any(poison in word for word in deduplicated)):
print ("useless domain %s" % item)
dirty.append(item)
else:
print ("nice domain %s" % item)
clean.append(item)
更新:
编辑代码,因为格式化很难看。
为了将来参考,我得到的错误是:
TypeError:' in'需要字符串作为左操作数,而不是列表
答案 0 :(得分:5)
由于外部循环已遍历deduplicated
,因此需要内部循环遍历poison
:
if any(search in item for search in poison):
print("Useless domain", item)
答案 1 :(得分:0)
如果我找对你,你想做的是:
dirty = [word for word in deduplicated if any(unwanted in word for unwanted in poison)]
clean = [word for word in deduplicated if word not in dirty]
print(dirty) # => ['en.wikipedia.org', 'youtube.com', 'it.wikipedia.org']
print(clean) # => ['facebook.com', 'google.com']
目前您的代码存在两个问题:
item
进行了迭代,但是您在检查中没有使用它们