在 python 中解包一个元组并对其进行迭代
Posted
技术标签:
【中文标题】在 python 中解包一个元组并对其进行迭代【英文标题】:Unpacking a tuple in python and iterating over it 【发布时间】:2016-01-03 17:20:01 【问题描述】:我正在尝试解压缩一个坐标元组,然后对其进行迭代以多次对精灵进行 blit:
def updateMap(self, playerPosition):
self.x_coord, self.y_coord = playerPosition
t = Tree(self.screen)
for x in range(self.x_coord):
for y in range(self.y_coord):
self.screen.fill((0,104,0))
t.drawTree((x, y))
但是我得到以下错误:
File "unnamed.py", line 26, in updateMap
for x, y in range(self.x_coord), range(self.y_coord):
ValueError: need more than 0 values to unpack
如果有人能以正确的方式为我指明正确的方向,我将不胜感激。谢谢。
编辑:我已经将我的代码编辑到上面来迭代每个坐标,比如 playerPostion 是否为 0,5,所以迭代为 (0,1) (0,2) (0,3) (0,4) ( 0,5) - 但是虽然我没有收到任何错误,但树似乎没有正确绘制。谢谢..这似乎是答案,除了我的编码是错误的。
【问题讨论】:
我没有真正看到元组,你想遍历 x,y 的所有可能组合吗? @WillemVanOnsem ..正确,我有点紧张...我在这里没有看到任何元组,我只是在查看错误消息.. playerPostion 是一个元组——如果 playerPosition 是 (0,5) 例如我想在 0,0 0,1 0,2 0,3 等上绘制树 但self.x_coord
和self.y_coord
总是0
?
@IronFist 是的,我不知道这是怎么回事?
【参考方案1】:
我认为这是你想要的:
from itertools import product
self.x_coord, self.y_coord = playerPosition #playerPosition is a tuple
t = Tree(self.screen)
for x,y in product(range(self.x_coord+1), range(self.y_coord+1)):
self.screen.fill((0,104,0))
t.drawTree((x, y))
【讨论】:
在我看来,在这种情况下,可以更好地确定最小值,因为x
和 y
将始终相同。
@zzoop...请考虑接受对您帮助最大的答案【参考方案2】:
我认为 OP 想要遍历 X 坐标的范围和 Y 坐标的范围,以便为每种情况创建一个 (x,y)。
for x in range(self.x_coord):
for y in range(self.y_coord):
print(x, y)
【讨论】:
【参考方案3】:假设两个可迭代对象的长度相同,请使用内置的 Python zip 函数。如果没有,那么您需要先进行一些消毒,以确保它们是。
for x, y in zip(range(self.x_coord), range(self.y_coord))
【讨论】:
这不会遍历所有坐标,但假设这就是问题所要寻找的 这不是预期的结果。 OP 肯定想要嵌套迭代。 这是我对他们在寻找什么的最佳猜测。 @ColinSchoen ..我是第一个向您发布类似答案的人,但在仔细阅读代码后,我意识到这不是 OP 意图并删除了我的答案..【参考方案4】:也许如果你改变:
self.x_coord = 0
self.y_coord = 0
playerPosition = self.x_coord, self.y_coord
到:
self.x_coord, self.y_coord = playerPosition
然后你将玩家位置 x 和 y 放入 self.x_coord 和 self.y_coord
要遍历 x 和 y 的每个组合,您需要在 x 范围内的循环内放置一个 y 范围内的循环
for x in range(self.x_coord):
for y in range(self.y_coord):
self.screen.fill((0,104,0))
t.drawTree((x, y))
【讨论】:
以上是关于在 python 中解包一个元组并对其进行迭代的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:没有足够的值来解包(预期为 2,得到 1)当试图在 python 中解包 dict 以使用 pandas 进行数据标记时