检查Python列表项是否包含另一个列表中的字符串

时间:2015-08-29 21:43:10

标签: python regex

我试图通过为我的工作开发一些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'需要字符串作为左操作数,而不是列表

2 个答案:

答案 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进行了迭代,但是您在检查中没有使用它们
  • 你的缩进搞砸了。 Python对空格很敏感