Python如果有任何语句或条件

时间:2018-05-17 15:56:13

标签: python

我正在使用Python 3.5,我正在尝试创建一个if语句来检查两个不同的列表中的两个不同变量,我尝试了以下方法:

if not any(x in colorsA for x in colorsB) or (y in colorsA for y in colorsC):

以及

if not any(x in colorsA for x in colorsB) or not any(y in colorsA for y in colorsC):

但似乎没有工作,只有第一个语句完成或根本没有,所有变量都是字符串。有一种简单的方法可以做到这一点吗?

示例:

ColorsA = ['red', 'yellow', 'green']
ColorsB = ['red', 'white', 'blue']
ColorsC = ['white', 'blue', 'green']

如果colorsB或colorsC

中的colorsA没有颜色

打印(colorA)

输出:黄色

2 个答案:

答案 0 :(得分:2)

您要找的是set difference。在Python中,您使用set类与集合进行交互:

ColorsA = ['red', 'yellow', 'green']
ColorsB = ['red', 'white', 'blue']
ColorsC = ['white', 'blue', 'green']

result = set(ColorsA) - (set(ColorsB) + set(ColorsC))
if result:
    print('At least one element in ColorsA is not found in either ColorsB or ColorsC')
else:
    print('All elements in ColorsA are found in either ColorsB or ColorsC')

如果您的集非常大,那么第一次构建这些set对象可能会很昂贵。另一方面,一旦你创建了一个set对象,它们的使用速度非常快。检查'yellow' in color_set之类的内容会比'yellow' in color_list快得多,尤其是当集合的大小增加时。

答案 1 :(得分:1)

你可以使用列表理解语法。 我展示了派生数组结果和最终if条件语句示例。

ColorsA = ['red', 'yellow', 'green']
ColorsB = ['red', 'white', 'blue']
ColorsC = ['white', 'blue', 'green']

print
print [x for x in ColorsA if x not in ColorsB]
print [x for x in ColorsA if x not in ColorsC]
print [x for x in ColorsA if ((x not in ColorsC) and (x not in ColorsB))]

if (len([x for x in ColorsA if ((x not in ColorsC) and (x not in ColorsB))])==0):
    print "some elements in ColorsA are not found in ColorsB or ColorsC"
else:
    print "All elements in ColorsA are found in either ColorsB or ColorsC"

为您提供输出

['yellow', 'green']
['red', 'yellow']
['yellow']
some elements in ColorsA are not found in ColorsB or ColorsC