Python 过滤列表中嵌套的元组,删除某些索引中的特定值?
我试图解决一个问题,根据下面的棋盘格变量和提供的rook位置,从我的格变量中删除任何元素。棋盘包含与rook相同的x值或相同的y值,因为rook只在棋盘上垂直和水平移动Python 过滤列表中嵌套的元组,删除某些索引中的特定值?,python,Python,我试图解决一个问题,根据下面的棋盘格变量和提供的rook位置,从我的格变量中删除任何元素。棋盘包含与rook相同的x值或相同的y值,因为rook只在棋盘上垂直和水平移动 #This portion of the code works correctly! #Generates the grid based on n provided to function grid = [(x, y) for x in range(n) for y in range(n)] #Say we use 4
#This portion of the code works correctly!
#Generates the grid based on n provided to function
grid = [(x, y) for x in range(n) for y in range(n)]
#Say we use 4 as n
#Grid would be [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), #(2, 3), (3, 0), (3, 1), (3, 2), (3, 3)]
现在挑战来了,当我尝试过滤掉任何元组,rook能够命中相同的x值或相同的y值
for x, y in rooks:
#Isolate x and y value of the rook. In this test, let's use x = 2 and y = 3
print(list(filter(lambda tuple: (x not in tuple, y not in tuple), grid)))
我的挑战是,当我试图将rook的x值与网格的所有x值进行专门匹配时,我一直在尝试将其合并到我的代码中。我知道要访问tuple的所有x值,我需要tuple[I][0],但不知道如何合并一个快速片段来循环遍历tuple的第一个元素中的所有tuple I
在filter函数中,我能让它在list I变量中的所有元组中旋转多少个?filter函数的问题是lambda返回一个元组而不是一个布尔值,它将始终被计算为true。您希望函数返回与rook具有相同行或列的所有正方形,因此函数应为: lambda tuple:x==tuple[0]或y==tuple[1] 以您的例子:
>>> rooks = [[2, 3]]
>>> for x, y in rooks:
print(list(filter(lambda tuple: x == tuple[0] or y == tuple[1], grid)))
[(0, 3), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 3)]
另外,您可能不应该覆盖tuple变量,可以使用square?我认为列表理解对于这类事情来说是一个简单的过程
n = 4
grid = [(x, y) for x in range(n) for y in range(n)]
rock = (1, 2)
def reduced_grid(rock, grid):
return [(x, y) for (x, y) in grid if x != rock[0] and y != rock[1]]
print(reduced_grid(rock, grid))
# [(0, 0), (0, 1), (0, 3), (2, 0), (2, 1), (2, 3), (3, 0), (3, 1), (3, 3)]
通过在以下条件中使用元组部分,可以访问具有列表理解的字段:
[field for field in grid if x == field[0] or y == field[1]]
给你:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (3, 0), (3, 1), (3, 2)]
上面没有区分x和y坐标。。。这可能会有问题。我认为这跟踪的是车不能击中的方块,而不是车可以击中的方块。是的,还不是100%清楚期望的结果是什么。。。要么是罐头,要么是罐头。。好吧,另一个选择只有两个感叹号是的,对不起!我应该说明的是,我过滤掉了rooks不能命中的,并返回了板上没有rooks wrathok的空格,AirQuid在显示列表理解方面更快。对于可访问的方块/字段,这将是另一种方式