检查一个列表是否存在于另一个列表中?

3

好的,我正在尝试采用更符合Python特色的方法。

我应该如何实现以下操作:

required_values = ['A','B','C']
some_map = {'A' : 1, 'B' : 2, 'C' : 3, 'D' : 4}

for required_value in required_values:
    if not required_value in some_map:
        print 'It Doesnt Exists'
        return False
return True

我看了一下内置函数all,但是我不知道如何将其应用于上述情况。

有什么建议可以使这个更符合Python的风格吗?

3个回答

11
all(value in some_map for value in required_values)

1
注意:这仅适用于由可哈希元素组成的列表。否则,在执行“value in some_map”时,您将收到TypeError异常。 - Kenan Banks
@Triptych 这正是我现在正在经历的。 - pythonian29033

3
return set(required_values).issubset(set(some_map.keys()))

2
事实证明,“in”字典键查找(在被接受的答案中)比检索键列表并将其转换为集合要快得多。 - Joe Koberg

0

尝试使用列表推导式:

返回 not bool([x for x in required_values if x not in some_map.keys()]) (为了清晰起见,进行了bool转换)

或者返回 not [x for x in required_values if x not in some_map.keys()](我认为这是更Pythonic的方式)

方括号内的语句构建了一个列表,其中包含所有未在您的映射键中找到的所需值。如果该列表为空,则计算结果为False,否则为True。

因此,如果映射中没有所有所需值,则列表推导式表达式将构建一个元素。这将计算为True,因此我们取反结果以满足您的代码要求(即所有所需值都应存在于映射中)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接