如何检查列表中是否只保留指定的元素?

时间:2017-01-06 12:41:00

标签: python

所以我想说我有一个这样的列表

WM_MENUCOMMAND

我想在这里做的是检测列表'color'只包含不是'hurley'和'maladroit'颜色的元素。

类似于:

color = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']

4 个答案:

答案 0 :(得分:2)

让我们创建一个set可用颜色

allowed = {'blue', 'green', 'red', 'white'}

然后检查"否则列表中至少有一个元素是真正的颜色"

print(not any(c in allowed for c in color))
如果列表中至少有一种颜色,

True['hurley', 'maladroit']会产生False

应该在性能方面非常快,因为:

  • 使用set进行测试
  • 它没有创建其他临时列表
  • 使用内置any功能

编辑:当我们使用isdisjoint(thx PM 2Ring让我查明)时,使用set方法更简单,更快捷:

print(allowed.isdisjoint(color))

答案 1 :(得分:2)

受到以前答案的启发: 创建一组允许的颜色,并检查差异中是否有任何允许的颜色。

allowed_colors = {'red', 'green', 'blue', 'white'}

color = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']

color_set = set(color)
if len(color_set - allowed_colors) < len(color_set):
    print('Nothing to see here')
else:
    print("I don't see colors.... I actually legit don't...")

编辑:解决方案不正确。按预期工作。虽然isdisjoint是最优雅的解决方案,但如果你知道集合论,正如让 - 弗朗索瓦所指出的那样。

答案 2 :(得分:1)

受相关答案(https://stackoverflow.com/a/642919/2034487)的启发,您可以使用set()的{​​{1}}方法:

包含颜色的列表:

intersection()

在没有任何颜色的情况下做同样的事情:

$ approved_colours = set(['blue','green'])
$ list_with_colours = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']
$ if approved_colours.intersection(list_with_colours):
$     print("There are colours present")
$ else:
$     print("There are no colours present")
> "There are colours present"

显然,您会将此方法放入包装器中以测试现实生活中的变量。我正在写长篇文章来证明这两个结果。

答案 3 :(得分:0)

color = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']

你可以结合这两个

color.count('hurley') 
color.count('maladroit')

或 这些

'hurley' in color
'maladroit' in color