Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用元组筛选数组时出现意外行为_Python - Fatal编程技术网

Python 使用元组筛选数组时出现意外行为

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

我有一个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()
一、 但是,我仍然在
相邻的_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:

如果0
4=0
对于
4
4
是多余的,则表示该值大于4。为什么你不应该得到它们?我怀疑你的意思是
如果0