Python - 检查一个元素是否同时在两个列表中

新手上路,请多包涵

在 Python 中,要检查一个元素是否在两个列表中,我们会这样做

if elem in list1 and elem in list2:

我们可以为此做以下事情吗?

 if elem in (list1 and list2):

原文由 Muhammad Waqar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 589
2 个回答

你不能。

list1 and list2 表示“ list1 如果它是空的, list2 否则”。因此,这不会检查您要检查的内容。

在交互式解释器中试试看。


执行此操作的简单方法是您已有的代码:

 if elem in list1 and elem in list2:

它有效,易于阅读,而且写起来很明显。如果有一个明显的方法来做某事,Python 通常会尽量避免添加不会增加任何好处的同义词。 (“TOOWTDI”,或“应该有一种——最好只有一种——显而易见的方法来做到这一点。”)


如果您正在寻找在某种特定方面 更好 的答案,而不仅仅是 不同 的,那么根据您的需要有不同的选择。

例如,如果您要经常进行此检查:

 elems_in_both_lists = set(list1) & set(list2)

现在你可以这样做:

 if elem in elems_in_both_lists:

这更简单,也更快。

原文由 abarnert 发布,翻译遵循 CC BY-SA 3.0 许可协议

不,声明

if elem in (list1 and list2):

不会为此特定目的工作。 Python 解释器所做的是首先检查 list1,如果发现空列表(即 - False ),它只返回空列表(为什么? - False 任何事情都会导致错误,那么,为什么要进一步检查?)如果不为空(即评估为 True ),它返回 list2 (为什么? - 如果第一个值为 True 表达式的结果取决于第二个值,如果它是 False ,表达式的计算结果为 False ,否则, True )-, soa-aac7c1)变为 if elem in list1if elem in list2 取决于您的实施。这称为短路。

有关短路的 Wiki 页面可能会有所帮助。

例子 -

 >>> list1 = [1, 2]
>>> list2 = [3, 4]
>>> list1 and list2
[3, 4]

>>> list1 = []
>>> list2 = [3, 4]
>>> list1 and list2
[]

原文由 Sukrit Kalra 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题