我发现,有一个相关的问题,关于如何找到列表中是否至少存在一个项目:
How to check if one of the following items is in a list?
但是,找出列表中是否存在所有项目的最佳方法是什么?
在搜索文档时,我找到了这个解决方案:
>>> l = ['a', 'b', 'c']
>>> set(['a', 'b']) <= set(l)
True
>>> set(['a', 'x']) <= set(l)
False
其他解决方案是这样的:
>>> l = ['a', 'b', 'c']
>>> all(x in l for x in ['a', 'b'])
True
>>> all(x in l for x in ['a', 'x'])
False
但是在这里你必须做更多的输入。
有没有其他的解决方案?
发布于 2010-10-14 17:05:34
像Python语言中的<=
这样的运算符通常不会被覆盖,以表示与“小于或等于”显著不同的含义。标准库这样做是不寻常的--在我看来,它像是遗留的API。
使用等效的、命名更清晰的方法set.issubset
。请注意,您不需要将参数转换为集合;如果需要,它将为您执行此操作。
set(['a', 'b']).issubset(['a', 'b', 'c'])
发布于 2010-10-14 16:58:09
我可能会以以下方式使用set
:
set(l).issuperset(set(['a','b']))
或者反过来:
set(['a','b']).issubset(set(l))
我发现它的可读性更好一点,但它可能是过度杀伤力。集合对于计算集合之间的并集/交集/差异特别有用,但在这种情况下,它可能不是最佳选择……
发布于 2010-10-14 19:01:22
我喜欢这两个,因为它们看起来最符合逻辑,后者更短,而且可能更快(这里使用的是backported到Python2.7的set
文字语法):
all(x in {'a', 'b', 'c'} for x in ['a', 'b'])
# or
{'a', 'b'}.issubset({'a', 'b', 'c'})
https://stackoverflow.com/questions/3931541
复制相似问题