Python 2.7 在Python中测试是否所有元素都在另一个列表中

Python 2.7 在Python中测试是否所有元素都在另一个列表中,python-2.7,Python 2.7,我想测试reference\u list是否包含required\u strings中的所有项目 required_strings = ['apple','banana','carrot'] reference_list = [['apple','tree'], ['banana','grass'], ['carrot','grass']] 我想知道测试结果是真是假。预期的答案是“正确的” 这就是我所尝试的: test

我想测试
reference\u list
是否包含
required\u strings
中的所有项目

required_strings = ['apple','banana','carrot']

reference_list = [['apple','tree'],
                  ['banana','grass'],
                  ['carrot','grass']]
我想知道测试结果是真是假。预期的答案是“正确的”

这就是我所尝试的:

test = [i for i in reference_list if any(s in i for s in required_strings)]
print test

您可以通过使用
set
和来执行此操作。我们将利用一些集合理论,将
所需字符串
参考列表
视为集合,并证明
所需字符串在您了解有效解决方案之前,没有理由尝试任何超级新奇或简洁的方法

首先,尽可能使你的答案与问题的英文描述相似。基本上,您应该在所需列表中的字符串上循环,并检查它们是否在任何子列表中。这是一个可以作为函数的存根

for req_string in required_strings:
   appears_in_reference = False
   for sub_list in reference_list:
       if req_string in sub_list:
           appears_in_reference = True
           break
   if not appears_in_reference:
       return False

return True
Python 2这是一种方法:

import itertools
required_strings = ['apple','banana','carrot']

reference_list = [['apple','tree'],
                  ['banana','grass'],
                  ['carrot','grass']]
x = list(itertools.chain(*reference_list))
print all(l in x for l in required_strings )
输出:

True

以下是返回布尔值列表的理解:

>>> test = [(True if i in s else False) for i in required_strings for s in reference_list]
[True, False, False, False, True, False, False, False, True]
或者,使用生成器检查原始所需字符串列表的长度。请注意使用()而不是[]

>>> test = ((True if i in s else False) for i in required_strings for s in reference_list)
然后,对照长度检查:

>>> counter = 0
>>> for truthiness in test:
...     if truthiness == True:
...         counter += 1
>>> len(required_strings) == counter
True

编辑:这可能只适用于Python 3.4+,但我认为值得一提。

那么,如果主列表中的每个项目都表示在一个引用子列表中,是否返回True?我不确定我是否理解规范。如果引用列表中的任何项目在必需列表中,则返回True?@required\u strings的所有元素都必须在“reference\u list”的任何子列表中。我希望只使用列表和条件来解决它,而不导入任何内容。@jose:将有代码需要展平列表,基本上;这就是链提供的全部内容。
>>> test = [(True if i in s else False) for i in required_strings for s in reference_list]
[True, False, False, False, True, False, False, False, True]
>>> test = ((True if i in s else False) for i in required_strings for s in reference_list)
>>> counter = 0
>>> for truthiness in test:
...     if truthiness == True:
...         counter += 1
>>> len(required_strings) == counter
True