所以我一直无法检查数字0是否在另一个列表中的一组列表中。这些行构成了我正在制作的pacman类型游戏的迷宫,所以关键是要检查pacman是否已经吃掉了所有的硬币。
这是我的代码:
row1 =[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
row2 =[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
row3 =[1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1]
row4 =[1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1]
row5 =[1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1]
row6 =[1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1]
row7 =[1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1]
row8 =[1,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1]
row9 =[1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1]
row10=[3,3,3,1,0,1,1,1,0,1,0,1,1,1,0,1,3,3,3]
row11=[3,3,3,1,0,1,0,0,0,0,0,0,0,1,0,1,3,3,3]
row12=[3,3,3,1,0,1,0,1,4,4,4,1,0,1,0,1,3,3,3]
row13=[1,1,1,1,0,1,0,1,3,3,3,1,0,1,0,1,1,1,1]
row14=[3,3,3,3,0,0,0,1,3,3,3,1,0,0,0,3,3,3,3]
row15=[1,1,1,1,0,1,0,1,5,5,5,1,0,1,0,1,1,1,1]
row16=[3,3,3,1,0,1,0,3,3,3,3,3,0,1,0,1,3,3,3]
row17=[3,3,3,1,0,1,0,1,1,1,1,1,0,1,0,1,3,3,3]
row18=[3,3,3,1,0,1,0,1,1,1,1,1,0,1,0,1,3,3,3]
row19=[1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1]
row20=[1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1]
row21=[1,0,1,1,0,0,0,0,0,3,0,0,0,0,0,1,1,0,1]
row22=[1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1]
row23=[1,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,1]
row24=[1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1]
row25=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
row26=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
maze = [row1,row2,row3,row4,row5,row6,row7,row8,row9,row10,row11,row12,
row13,row14,row15,row16,row17,row18,row19,row20,row21,row22,
row23,row24,row25,row26]
所以我尝试了if 0 not in maze:
但if语句将执行0是否在(迷宫)中。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:7)
答案 1 :(得分:1)
首次尝试时,您只能在顶级列表中测试0
。当然,顶级列表只有列表,因此,您的测试失败。
您必须遍历maze
中的每个子列表。您可以使用手动for循环,这是一个有效的选项:
def has_zero(maze):
for sublist in maze:
for el in sublist:
if el == 0:
return True
return False
但Python为any()
函数提供了一种更好的方法(基本上是对上述函数的更好实现):
如果iterable的任何元素为true,则返回True。如果iterable为空,则返回False [...]。
但您还必须使用not
运算符(在其他语言中称为!
)来否定 any()
可能返回的真值。因此,完整的解决方案将是:
not any(el == 0 for sublist in maze for el in sublist)
答案 2 :(得分:1)
any
,但您也可以展平您的列表(例如使用itertools.chain.from_iterable
)并检查项目是否包含在内:
from itertools import chain
if 0 in chain.from_iterable(lst):
# do something
与any
一样,只要找到一个,就会停止。只是提到它,因为它经常被忽视:生成器和迭代器(如chain
)通常支持in
运算符。
答案 3 :(得分:0)
答案 4 :(得分:-1)
a = [1,1,1]
b = [1,0,1]
c = [0,1,2]
d = [a,b,c]
for i in d:
if i.__contains__(0):
print("yes")