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
删除任何类型的大学,学校或学院的最佳方法
编辑:我也想保留列表的顺序。抱歉,我没有明确指出这一点。
答案 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)) ]