【问题标题】:Unpacking a tuple in python and iterating over it在 python 中解包一个元组并对其进行迭代
【发布时间】: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 是的,我不知道这是怎么回事?

标签: python tuples unpack


【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多