【问题标题】:Check if a tuple contains any element of the list, python [duplicate]检查元组是否包含列表的任何元素,python [重复]
【发布时间】:2020-08-16 15:20:47
【问题描述】:

我正在编写基于词形还原的简单分类器,本质上我需要检查一个元组是否包含列表的任何元素。简单例子:

>>> ['dog', 'bone'] in ('dog', 'cat', 'parrot')

返回False,而我需要它返回True。最简单、最优雅的方法是什么?

【问题讨论】:

  • any(x in b for x in a)--骗子应该足够接近。如果列表很大,请创建 sets 并将它们相交。

标签: python list tuples


【解决方案1】:

要么:

any([val in ('dog', 'cat', 'parrot') for val in ['dog', 'bone']])

实际使用时,不要在推导式中声明列表和元组,这样会无端浪费资源,你应该:

test_list = ['dog', 'bone']
available_items = ('dog', 'cat', 'parrot')
any([val in available_items for val in test_list])

另一种可能的解决方案:

set(['dog', 'bone']).intersection(set(('dog', 'cat', 'parrot'))) # Would return a non empty set if there is an intersection, which translates to true.

# Use case:
if set(['dog', 'bone']).intersection(set(('dog', 'cat', 'parrot'))):
    print('intersection!')

【讨论】:

  • @ggorlen 内部元组不会被多次创建。这是一个可以多次使用的常量。
  • 是的,你是对的——元组是不可变的,但如果它是一个列表,我认为它会被创建多次。我的错。尽管如此,any 可能应该使用生成器而不是列表来允许提前保释,无论如何,这篇文章显然是一个骗局。
  • @ggorlen 你必须把它写成例如list((...)),不过,即使[...] 在那里变成了一个元组常量。我当然同意生成器:-)
  • 很高兴知道,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-05-02
  • 2013-02-20
  • 2021-12-14
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2020-10-22
相关资源
最近更新 更多