python-3.x - 如何修复此代码?(多维)
问题描述
想象有一个棋盘。如果没有 2 个皇后(在下面的代码中用 1 表示)位于对角线,我希望我的函数返回 True。
chess = [[1, 0, 0, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
[0, 0, 1, 0]]
def diagonal_check(chess):
v = []
z = []
for y in range(len(chess)):
v.append(map(lambda x: x[len(chess) - y - 1], chess[y]))
for t in range(len(chess)):
z.append(map(lambda x: x[t], chess[t]))
if len(list(filter(lambda x: x == [1], v))) > 1 or len(list(filter(lambda x: x == [1], z))) > 1:
return False
else:
return True
print(diagonal_check(chess))
出于某种原因,尽管上面的国际象棋对角线显示了 2 个 '1',但我的代码始终返回 True。有人可以帮我吗?总体上解决这个问题可能有更好的答案,但我想知道如何修复这个特定的代码。
仔细一看,我意识到 x[], chess[y] 部分有问题。但我不知道如何解决它。
解决方案
一个更简单的解决方案是在这种情况下不使用 map,因为它没有帮助。
def diagonal_check(chess):
v = []
z = []
for y in range(len(chess)):
v.append(chess[y][len(chess) - y - 1])
for t in range(len(chess)):
z.append(chess[t][t])
if len(list(filter(lambda x: x == 1, v))) > 1 or len(list(filter(lambda x: x == 1, z))) > 1:
return(False)
else:
return(True)
map
将返回一个迭代器并且不会立即评估它。因此,您需要在每个map
对象上调用 next 或将其显式转换为列表。
推荐阅读
- c++ - Clion 的外部库(犰狳)
- ajax - Ajax 请求在搜索完成后没有打开请求
- yarn-workspaces - 修改纱线的锁定文件的问题
- sql - 在 SQL Server 中转换日期格式
- reactjs - Redux-Saga,React,Apollo Client,如何使用 JWT 获取新的刷新令牌(状态码 401 错误)
- flutter - 弹出窗口的屏障颤抖着覆盖在键盘下方
- java - 流程作业错误 - 无法追踪根本原因
- altair - 熊猫 Altair 支持哪些版本?
- xero-api - 在 Xero Api 中提交和授权的发票
- azure - 用于创建新 PAT 的 Azure DevOps Rest API