我目前正在用Python制作“ Hangman”型游戏。我需要一种方法来检查是否所有正确选择的字母都在解决方案中,以便“您赢了!”消息可能会生成。我通过使用本教程找到了一种使用内置的“ all()”函数来做到这一点的方法:
https://thispointer.com/python-check-if-a-list-contains-all-the-elements-of-another-list/
我使它工作了,但我不太了解。我需要打开这行包装的帮助:
result = all(elem in list1 for elem in list2)
用通俗的英语来说,我认为这样的意思是“如果list1中的所有元素也都在list2中,则结果为true。”
确切的含义对我来说有点模糊,因为我习惯于只在“ for”循环中使用“ for”,它位于行的开头。有人可以澄清吗?另外,如果我想向all()函数添加另一个条件怎么办?例如:list1中的所有内容都在list2 和list3 中。
更新
感谢@roganjosh的澄清。阅读您的消息后,我已经对此进行了一些尝试:
list1 = ['a', 'b', 'c']
list2 = ['d', 'e', 'f']
list3 = ['g', 'h', 'i']
list4 = ['a', 'b', 'c', 'd', 'e', 'f']
# all of list1 is in list4
print('all(elem in list4 for elem in list1) == ' + str(all(elem in list4 for elem in list1)))
# All of list1 and list2 are in list4
print('all(elem in list4 for elem in list1 and list2) == ' + str(all(elem in list4 for elem in list1 and list2)))
# Not all of list1 and list3 are in list4
print('all(elem in list4 for elem in list1 and list3) == ' + str(all(elem in list4 for elem in list1 and list3)))
这是我在StackOverflow上的第一篇文章,再次感谢您和这个美好的社区!
答案 0 :(得分:0)
将表达式放在all()
函数或类似函数中时,它会成为生成器表达式。
所以这个:
result = all(elem in list1 for elem in list2)
与此相同:
list1 = [1,2,3]
list2 = [3,4,5]
def contains(l2, l1):
for item in l2:
yield item in l1
result = all(contains(list2, list1))
all()
从给定的 iterator 中提取每个值,并检查所有元素的计算结果是否为 True 。
所以基本上 generator表达式或 contains()函数可以解析为:
[真,假,假]
所以您得到:
result = all([True, False, False])
结果 为
False
您可以添加任意多个条件,但是随着 generator表达式变得越来越复杂,最好将其解压缩到其自己的函数/生成器中并分别构建列表/迭代器。< / p>
答案 1 :(得分:0)
让我们举个例子
l1 = [1,2,3]
l2 = [1,2,3,4,5]
l3 = [1,4,5,3,2]
l4 = [2,3]
l1_in_l2 = [elem in l2 for elem in l1]
l1_in_l3 = [elem in l3 for elem in l1]
l1_in_l4 = [elem in l4 for elem in l1]
(1) (elem in list1 for elem in list2)
给出一个生成器对象,其含义与
for elem in list2:
# 'remember'(yield) if elem is in list1 or not
因此,对于列表2中的每个元素,它都会记住它是否在list1中(真)或否(假)。如果您看一下list(elem in list1 for elem in list2)
,您会感觉到)。
对于示例,它将返回
[True, True, True] # l1_in_l2
[True, True, True] # l1_in_l3
[False, True, True] # l1_in_l4
(2),然后all
方法仅检查此list
中是否只有True值(如果list2
的所有元素都是这种情况也可以在list1
中找到)。
对于示例,它将返回
True # all(l1_in_l2)
True # all(l1_in_l3)
False # all(l1_in_l4)
(3),您可以灵活地添加条件。例如all(elem in l2 and elem in l3 for elem in l1)
是一个可能的示例。