python - 如何检查列表中的所有项目是否在另一个列表中?

标签 python

我有两个列表说

List1 = ['a','c','c']
List2 = ['x','b','a','x','c','y','c']

现在我想知道 List1 的所有元素是否都在 List2 中。在这种情况下,一切都有。我不能使用子集函数,因为我可以在列表中有重复的元素。我可以使用 for 循环来计算 List1 中每个项目的出现次数,看看它是否小于或等于 List2 中的出现次数。有没有更好的方法来做到这一点?

谢谢。

最佳答案

当出现次数无关紧要时,您仍然可以通过动态创建集合来使用子集功能:

>>> list1 = ['a', 'c', 'c']
>>> list2 = ['x', 'b', 'a', 'x', 'c', 'y', 'c']
>>> set(list1).issubset(list2)
True

如果您需要检查每个元素在第二个列表中出现的次数是否至少与在第一个列表中出现的次数一样多,您可以使用 Counter 类型并定义您自己的子集关系:

>>> from collections import Counter
>>> def counterSubset(list1, list2):
        c1, c2 = Counter(list1), Counter(list2)
        for k, n in c1.items():
            if n > c2[k]:
                return False
        return True
   
>>> counterSubset(list1, list2)
True
>>> counterSubset(list1 + ['a'], list2)
False
>>> counterSubset(list1 + ['z'], list2)
False

如果您已经有计数器(无论如何这可能是存储数据的有用替代方案),您也可以将其写为一行:

>>> all(n <= c2[k] for k, n in c1.items())
True

关于python - 如何检查列表中的所有项目是否在另一个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147751/

相关文章:

python - 在 python 上的 Windows 上安装 Xgboost 问题

python - 有没有办法在没有index_together Meta选项的情况下定义多字段索引?

Python构造一个字典数据类型?

Python 或 matlab。需要根据一组坐标计算曲率

python - 将刻度数据转换为 OHLCV 烛台数据

Python - 以一种奇怪的方式替换字符串;

python - Arff 装载机 : AttributeError: 'dict' object has no attribute 'data'

python - urllib2/requests 和 HTTP 相对路径

python - 我可以使用 SQL 将存储为 CSV(逗号分隔值)的表列的内容拆分为新表中的各个行吗?

python - 我们可以使用自制的语料库使用 gensim 训练 LDA 吗?