python快速提取两个列表中的相同元素

今天想比较一下list和str两个类有哪些共同函数。我知道可以通过dir(list)和dir(str)得到这两个类中函数的列表,于是接下来的问题就是怎样得到两个列表中的共同元素。

开始想到的是用两个for循环并通过in来查找。但考虑到嵌套for循环实现这个功能比较麻烦,于是继续考虑其他方法。

想起之前见过一个用字典结构统计单词个数的栗子,于是想到用字典对两个列表中的元素进行计数({elem: count}),如果同一个元素出现了两次,那么该元素就是共同元素。如果通过个数判断,首先需要对列表中的元素去重,可惜列表好像没有直接去重的方法,这时自然想到了集合。通过set(list)方法很容易得到没有重复元素的集合。想到集合就想到了集合中的方法intersection(),该方法用于求两个集合的交集,也就是两个集合的共同元素,到这里,貌似可以把使用字典结构的思路踢到一边去了。于是,反推一下,很容易得到求两个列表共同元素的方法。

具体代码如下:

#! python
#这个函数用于提取两个列表的共同元素
def extra_same_elem(list1, list2):
    set1 = set(list1)
    set2 = set(list2)
    iset = set1.intersection(set2)
    return list(iset)

lst1 = dir(list)
lst2 = dir(str)
lst = extra_same_elem(lst1, lst2)
lst.sort() #对结果排一下序,方便查看
print(lst)

运行结果如下图所示:

可以看到除了系统定义的变量外,list和str只有两个共同的方法,分别是count和index。

按照这个思路,提取多个列表共同元素的方法也很简单,例如list, str, tuple, dict, set的共同方法有哪些(答案是没有!)。

对以上方法进行改进,用于提取多个列表的共同元素:

#! python
#这个函数用于提取多个列表的共同元素
def extra_same_elem(lst, *lsts):
    iset = set(lst)
    for li in lsts:
        s = set(li)
        iset = iset.intersection(s)
    return list(iset)

lst1 = dir(list)
lst2 = dir(set)
lst3 = dir(dict)
lst4 = dir(set)
#lst5 = dir(str)
lst = extra_same_elem(lst1, lst2, lst3, lst4)
lst.sort()#对结果排一下序,方便查看
print(lst)

 

如果你有更简单的方法,而且也乐于分享,可以在下方评论区写上。谢谢。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章