我正在使用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)
输出:黄色
答案 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