python - 我正在尝试迭代一个函数的返回值,该函数返回一个由 3 个元组组成的元组
问题描述
我有一个称为网格的二维列表。
grid = [[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
动作列表:
actlist = [1,2,3,4]
还有一个二维列表:
U = [[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
还有一个名为 T 的函数,它以 3 个整数作为参数。
def T(i,j,actions):
函数 T 如下所示:这个函数的作用是,它接受 i、j 和操作并返回元组的元组,如下所示 -
现在的问题是,当我尝试在 python 的内置 sum 函数中调用该函数时,在 for 循环中它显示错误。
它显示的错误是
我的问题是,如何使用 for 循环分别获取 3 个元组,我可以在每次迭代中使用一个元组中的所有三个值。有一件事,下面的代码未能获取三个元组的单个值。
解决方案
您的T
函数有时会返回三个元组的元组:
return (0,0,0.8),(1,0,0.1),(1,0,0.1)
…有时只是三个整数的元组:
return (-1,-1,1)
当您尝试迭代三个值并将每个值解压缩为 3 元组时,有时这些值将是整数而不是 3 元组。这显然是行不通的。
不幸的是,我不能告诉你如何解决这个问题,因为我不知道这个函数应该做什么。也许你想要这个:
return (-1,-1,1), (-1,-1,1), (-1,-1,1)
……或者可能是这样的:
return (-1,-1,1),
……或者可能是完全不同的东西。但我知道您想返回某种可迭代的 3 元组。
但与此同时,您的程序中至少还有三个其他严重错误。
首先,如果这些elif
条件都不成立,会发生什么?您只是从函数的末尾掉下来,这意味着您 return None
,这不是 3 元组的可迭代对象。
第二:
elif(actions == "LEFT"):
你所有的其他测试都是针对一些常量命名LEFT
的。除非该常量恰好具有 value 'LEFT'
,否则这将不匹配。
第三:
if (actions == UP or DOWN or LEFT or RIGHT and i == 0 and j == 3):
… 方法:
if (actions == UP) or (DOWN) or (LEFT) or (RIGHT and i == 0 and j == 3):
即使您通过添加括号来解决优先级问题:
if actions == (UP or DOWN or LEFT or RIGHT) and i == 0 and j == 3:
…这仍然没有用,因为UP or DOWN or LEFT or RIGHT
它只是那些真实的(非零)中的第一个。
你可能想要这样的东西:
if actions in {UP, DOWN, LEFT, RIGHT} and i == 0 and j == 3:
推荐阅读
- python - 为什么redis设置并变得超级慢然后磁盘
- gulp-watch - 升级到 gulp 4 后 gulp watch 导致无限循环
- android - 消息应用程序仅在消息编辑器中打开
- vim - 在 .vimrc 中设置 nospell 无效
- python - 如何减小具有复杂值的数组的大小
- dask - 如何在多个 dask 数组之间共享相同的索引
- python - 创建服务器全局通道时避免重新启动机器人
- bash - 如何用unix中文件的修改日期减去今天的日期?
- javascript - 组合数组对象的可观察对象
- python-3.x - Keras 错误 - 预期 activation_1 的形状为 (2622,) 但数组的形状为 (1,)