Python 使用元组筛选数组时出现意外行为
我有一个5x5的灯光对象网格。当一个灯切换时,四个相邻的灯也会切换 但是,灯光在第一行或第五行或第列之外不存在,因此不会切换 我的逻辑是:Python 使用元组筛选数组时出现意外行为,python,Python,我有一个5x5的灯光对象网格。当一个灯切换时,四个相邻的灯也会切换 但是,灯光在第一行或第五行或第列之外不存在,因此不会切换 我的逻辑是: def切换相邻的灯光(自身、灯光): 相邻_灯_未过滤=[ (轻x+1,轻y), (轻x-1,轻y), (轻x,轻y-1), (轻x,轻y+1) ] 相邻_灯=[] 对于未过滤的相邻_灯中的i: 如果4=0或i[1]>=0: 相邻_灯。附加(i) 对于相邻_灯中的a、b: self.board[a][b].toggle() 一、 但是,我仍然在相邻的_li
def切换相邻的灯光(自身、灯光):
相邻_灯_未过滤=[
(轻x+1,轻y),
(轻x-1,轻y),
(轻x,轻y-1),
(轻x,轻y+1)
]
相邻_灯=[]
对于未过滤的相邻_灯中的i:
如果4=0或i[1]>=0:
相邻_灯。附加(i)
对于相邻_灯中的a、b:
self.board[a][b].toggle()
一、 但是,我仍然在相邻的_lights
列表中获得负值或大于4的值
我哪里做错了?这是第二次实现尝试——第一次使用了
.remove()
方法,但仍然得到了相同的结果 通过使用,您可以使代码更加紧凑。假设“相邻”指的是4连通的邻居,那么上面的代码片段应该可以完成这项工作:
导入itertools
def切换相邻灯光(自身、灯光):
对于itertools.product([-1,0,1],repeat=2)中的dx,dy:
x、 y=light.x+dx,light.y+dy
如果0如果您只需要行和列介于0和3之间的元素,那么您的if
语句应该是:
if 0 <= i[0] < 4 and 0 <= i[1] < 4:
如果04=0
对于4
4
是多余的,则表示该值大于4。为什么你不应该得到它们?我怀疑你的意思是如果0