检查另一个列表中是否存在任何两个项目

时间:2019-01-15 06:12:35

标签: python list

如何检查列表中的任何两项是否在另一个列表中?

我正在尝试研究如何测试列表中是否出现某些单词组合。例如:

l1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

if all(['A', 'C', 'D']) or all(['A', 'D']) or all(['C', 'D'])in l1:
    print('Violation') 

该想法是确定AC中的一个(或两个)是否与D同时存在。

我已经尝试了上面的代码,但是由于总是假设仅检查单个清单中的任何一项是否在L1内,所以我总是会遇到违规行为。

3 个答案:

答案 0 :(得分:2)

如果要检查这些子集,则必须分别检查每个子集。您对all的使用也不正确。 all检查传递给它的序列中的所有元素是否都是"Truthy"

all(['A', 'B', 'C'])
# True

因此您的if实际上减少为:

if True or True or True in l1:

表达式短路到if True,因此它总是被执行。


为此,我将对set.issuperset()列中的每个子集执行一次df检查。

subsets = [{'A', 'C', 'D'}, {'A', 'D'}, {'C', 'D'}]
columns = set(df)
if any(columns.issuperset(s) for s in subsets):
    print('Violation')

答案 1 :(得分:2)

我不确定我是否完全理解您的问题...

此代码检查l1中是否存在['A','D'] and ['C','D']。

if all(i in l1 for i in ['A', 'D']) and all(i in l1 for i in ['C', 'D']):
    print('Violation')

如果您想要or条件,

if all(i in l1 for i in ['A', 'D']) or all(i in l1 for i in ['C', 'D']):
    print('Violation')

答案 2 :(得分:2)

当您说全部(['A','C','D'])时,每个字母都会转换为True布尔值,从而使all()语句为true,“ Violation”将总是被打印。这是一种解决方法:

l1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
pattern1 = ['A', 'C', 'D']
pattern2 = ['A', 'D']
pattern3 = ['C', 'D']

for pat in [pattern1, pattern2, pattern3]:
    if all(letter in l1 for letter in pat):
        print("Violation")
        break