从另一个列表中检查一个列表中的元素

时间:2017-11-29 10:42:51

标签: python python-3.x list hashtable

以下代码尝试扫描所有要素元素的mag元素。如果可以在mag中找到所有注释的UNIQUE元素,那么它应该打印YES ..否则它应该打印NO。 对元素的检查应该区分大小写。

mag =['two', 'times', 'three', 'is', 'not', 'four', 'two']
note =['two', 'times', 'two', 'is', 'four']
r = ""
x=[]
for i in mag:
    for j in note:
        if j in i and j not in x:
            x.append(j)
    if len(x)==len(note):
        r = "YES, all note elements can be found in mag"
    else:
        r = "NO, all note elements cannot be found in mag"
print(r)
print (" ".join(map(str, x)))

当我运行代码时,我得到r =" NO,所有n个元素都无法在mag" ..但不应该是这种情况,因为元素的频率" 2"列表(mag)和列表(注释)中都是2

我想要实现的目标: 我想比较是否可以在mag中找到音符中的每个独特元素。例如如果mag = [" a"," b"," c"," d"]和note = [" b&# 34;," a"," c"] ..它将返回TRUE。但如果mag = [" a"," b"," c"," d"]和note = [" b& #34;," a"," a" " c"]然后它返回false,因为" a"在笔记中出现两次,但在mag中出现一次

3 个答案:

答案 0 :(得分:0)

一种简单的临时方法,可以检查list1list2的所有元素是否都在使用

def check_subset(list1, list2):
    for item in list1:
        if item not in list2:
            return False
    return True

或者作为使用列表理解的oneliner:

all([item in list2 for item in list1])

更好的方法是使用集合,例如看这里: Python - verifying if one list is a subset of the other

答案 1 :(得分:0)

使用Counter计算每个单词出现次数的次数,然后我相信您的检查结果是note的计数器是否小于{{{ 1}},但不幸的是,计数器并没有像我想象的那样实现mag。你必须手工比较它们:

<=

答案 2 :(得分:0)

不是单行,因为您必须先识别较短的列表。如果您始终知道,note的元素少于mag,那么您可以跳过此测试。

a = [note, mag][len(mag) > len(note)]         #more list elements
b = [note, mag][mag != a]                     #less list elements

print(all([a.count(item) >= b.count(item) for item in set(b)]))

输出

mag =['two', 'times', 'three', 'is', 'not', 'four', 'two']
note =['two', 'times', 'two', 'is', 'four']
>>>True

mag =['two', 'times', 'three', 'is', 'not', 'five']
note =['two', 'times', 'two', 'is', 'four']
>>>False