在Python中搜索列表以查找匹配项?

在Python中搜索列表以查找匹配项?,python,list,loops,Python,List,Loops,我有Python列表,其中包含各种字符串,例如: List1 = ["a","b","c","d"] List2 = ["b","d","e","f"] List3 = [] List4 = ["d","f","g"] 我需要遍历这些列表,只要它们不是空的,并查找所有非空列表中的项目。在上面的示例中,精确匹配列表将是[“d”],因为这是所有非空列表中唯一出现的项。List3为空,因此它不在该列表中并不重要 for thing in list1: # iterate each item, you

我有Python列表,其中包含各种字符串,例如:

List1 = ["a","b","c","d"]
List2 = ["b","d","e","f"]
List3 = []
List4 = ["d","f","g"]
我需要遍历这些列表,只要它们不是空的,并查找所有非空列表中的项目。在上面的示例中,精确匹配列表将是[“d”],因为这是所有非空列表中唯一出现的项。List3为空,因此它不在该列表中并不重要

for thing in list1: # iterate each item, you can check before hand if its not empty
      if len(list2) > 0: # if not empty
         if thing in list2: # in the list 
            # do the same thing for the other lists

类似这样的东西

这里有一些函数式编程之美:

from operator import and_
from functools import reduce

Lists = List1, List2, List3, List4

result = reduce(and_, map(set, filter(None, Lists)))

我现在无法测试这一点,但类似于以下内容的内容应该可以工作:

intersection(set(l) for l in [List1, List2, List3, List4] if l)

它使用Python的内置数据类型来执行交叉操作。

输出列表的顺序重要吗?您“需要一个代码”?不,不重要。只要我能把每个精确的匹配项附加到它上面。你读了吗?
if len(list2)>0:#if not empty
<代码>如果列表2:将检查它是否为空列表(这是错误的)。
交集
是一种
设置
的方法,而不是一个独立的函数。顺便说一句,
操作符
-免费版本:
减少(设置.交集,映射(设置,过滤(无,列表))
@timgeb,酷,这样看起来会更好。此外,导入更少。此外,这节省了手动将所有列表转换为集合的时间,只有
列表[0]
必须是集合。(我不知道这是否有什么不同。)