首页 > 解决方案 > 我正在尝试迭代一个函数的返回值,该函数返回一个由 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 个元组,我可以在每次迭代中使用一个元组中的所有三个值。有一件事,下面的代码未能获取三个元组的单个值。

标签: pythonpython-3.xsumtuplesreturn-type

解决方案


您的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:

推荐阅读