Python列表,保留列表的所有子列表中存在的所有值

标签 python list sublist

我需要找到更大列表的所有子列表中存在的所有值(它们都是 id)

我尝试的是首先获取所有列表中存在的所有唯一值,然后测试每个值,但这在大列表上非常慢

l1 = ["a", "b", "c", "d", "e", "f"]
l2 = ["b", "c", "e", "f", "g"]
l3 = [ "b", "c", "d", "e", "f", "h"]
LL = [l1, l2, l3]
LL
unique_ids = set(x for l in LL for x in l)

filter_id = []
lenList = len(LL)
for id in unique_ids:
    if sum(id in item for item in LL) == lenList:
        filter_id.append(id)

如何加快搜索速度?

最佳答案

I need to find all value that are present in all sublist of a larger list (they are all ids).

如果我们将这些子列表放入单个列表中,则“所有子列表中存在的值”将恰好出现 len(LL) 次(在本例中:3)。 ;)

这可以使用 Counter 在一行中完成:

from collections import Counter

result = [key for key, value in Counter(elem for sub_list in LL for elem in set(sub_list)).items() if value == len(LL)]

说明:

  • set(sub_list) - 我们删除子列表中意外的重复项,以免弄乱我们的计数
  • (elem for sub_list in LL for elem in set(sub_list)) - 将其展平为单个可迭代
  • Counter - 返回字典,其中包含每个元素在可迭代对象中出现的次数
  • dict.items() 获取键和值对
  • if value == len(LL) - 过滤每个子列表中存在的键
<小时/>

编辑:为了提高可读性,什么是什么:

result = [key 
          for key, value in Counter(elem 
                                    for sub_list in LL 
                                    for elem in set(sub_list)
                                   ).items() 
          if value == len(LL)]

关于Python列表,保留列表的所有子列表中存在的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58339970/

相关文章:

python - 为什么我没有足够的值来解压某些图像(预期 2,得到 1)?

python - 如何对字符串和 int 值数组、按字母顺序和 "reversed"字母顺序的多个属性进行排序

python根据子列表值重新排列列表中的元素

Python Regex 匹配 float 一定次数

python - 用于分析我的代码速度的 ApacheBench 替代品

sql - 将结果转为逗号分隔列表

c++ - 列表的二维数组 C++

python3从列表列表中总结元素

list - Haskell:测试列表是否包含特定的 "sublist"

python - 如何从Python数组中获取匹配的记录?