繁体   English   中英

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

[英]Check if any two items are present within another 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') 

这个想法是要确定ACD一起存在。

我已经尝试了上面的代码,但由于总是假设它仅测试是否有任何检查清单的单个项目在L1范围内,所以我总是遇到违规情况。

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

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

因此,您的if实际上减少到:

if True or True or True in l1:

该表达式会短路到if True ,因此始终会执行。


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

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

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

该代码检查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')

当您说全部(['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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM