如何检查列表中的元素是否与字符串列表中的另一个元素匹配?

时间:2019-05-30 10:30:18

标签: python

输入列表

list1 = ['Google', 'Stanford University', 'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 'AU-KBC Research Centre']
exclusion_list = ['university','institute','school','University','Institute','School']

输出列表

output=['Google','AU-KBC Research Centre']

输出应仅包含那些不包含exclusion_list中的单词(元素)的元素 我已经搜索了所有SO。但是,他们都没有给出具体解决这个问题的答案。我尝试使用filter()和一个哑函数。但是,我正在寻找一种非暴力解决方案。另外,我对使用正则表达式解决问题的其他解决方案感到好奇。

基本上

我正在寻找从list1删除任何类型的大学,学校或学院的最佳方法

  

编辑:我也想保留列表的顺序。抱歉,我没有明确指出这一点。

6 个答案:

答案 0 :(得分:4)

为获得有效的解决方案,您可能需要在此处使用sets。将exclusion_list定义为set,并使用列表推导检查list1中每个单词的成员资格:

list1 = ['Google', 'Stanford University',
         'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 
         'AU-KBC Research Centre']

# define a set from the exclusion_list
exclusion_list = set(['university','institute','school','University','Institute','School'])

[i for i in list1 if not set(i.split()).intersection(exclusion_list)]
# ['Google', 'AU-KBC Research Centre']

答案 1 :(得分:1)

我们可以执行以下操作:

out = []
excl = set(exclusion_list)
for item in list1:
    for word in item.split():
        if word in excl:
            break
    else:
        out.append(item)

答案 2 :(得分:1)

import pandas as pd
k = pd.Series(['Google', 'Stanford University', 'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 'AU-KBC Research Centre'])
k[~k.str.contains('|'.join(exclusion_list))].tolist()    

答案 3 :(得分:1)

单线:

[s for s in list1 if not any(e in s.lower() for e in exclusion_list)]

与您提到的过滤器类似:

list(filter(lambda s: not any(e in s.lower() for e in exclusion_list), list1))

答案 4 :(得分:1)

尝试一下。

list1 = ['Google', 'Stanford University', 'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 'AU-KBC Research Centre']
exclusion_list = ['university','institute','school','University','Institute','School']
exclusion_list = [i.lower() for i in exclusion_list]
for i in list1:
    if not any(map(lambda x:x in i.lower(), exclusion_list)):
        print(i)

答案 5 :(得分:1)

尝试一下:

[name  for name in list1 if not any(x.lower() in name.lower() for x in set(exclusion_list)) ]