【问题标题】:Want to reverse a range but I get back <range_iterator object at xxxxxxxxxxxxxxx>想要反转一个范围,但我得到 <range_iterator object at xxxxxxxxxxxxxxx>
【发布时间】:2022-11-15 04:44:29
【问题描述】:

我正在编写一个连接“M”,我想枚举从最大数字(最后一个)开始的行。所以我尝试在我的函数中使用 reverse,但它打印了这个&lt;range_iterator object at 0x0000017B4A49D7F0&gt;。谁能帮帮我?

这是我的代码:

def print_board(self):
    # Number the columns separately to keep it cleaner
    print(end='  ')
    for r in range(BOARD_COLS):
        print(f"{r} ", end="")
    print("")

# Print the slots of the game board
for r in range(BOARD_ROWS):
    backwards = reversed(range(r))
    print(backwards, end="")
    print('', end="")
    for c in range(BOARD_COLS):
        print(f" {self.board[r][c]}", end="")
    print("")

假设 BOARD_ROWS = 7,我想打印从 7 开始一直到 0 的数字。

【问题讨论】:

  • 为什么不在开始时以这种方式生成范围? docs.python.org/3/library/functions.html#func-range
  • reversed 返回一个迭代器。如果你想要一个列表,那么你可以使用list(reversed(range(r)) 创建一个。
  • 我不能从一开始就反转它,因为我的程序应该是一个连接 4 类型的游戏,而不是在底部添加块,当我反转范围(BOARD_ROWS)时它会在顶部添加块。

标签: python


【解决方案1】:

reversed() 返回一个 range 对象。

查看您的要求,您想要打印反向数字,因此您只需反转 range(BOARD_ROWS)

这是代码的外观(范围部分)

for r in reversed(range(BOARD_ROWS)): # iterates 6 to 0
    print(r) # 6, 5, 4, 3, 2, 1, 0 - this is index
    for c in range(BOARD_COLS):
        print(f" {self.board[r][c]}", end="")
    # you can add the print statements, didn't find them useful so removed it.

文件:
reversed()

【讨论】:

  • 技术上, reversed 返回一个反向迭代器。由于在这种情况下输入是range,因此它返回range_iteratorreversed 确实不是返回一个 range 对象,这可以通过尝试访问诸如 .step 之类的属性来验证,该属性存在于 range 但不存在于 reversed(range(...)) 返回的任何内容上。
  • 我不能从一开始就反转它,因为我的程序应该是一个连接 4 类型的游戏,而不是在底部添加块,当我反转范围(BOARD_ROWS)时它会在顶部添加块。
猜你喜欢
  • 2020-11-28
  • 2020-11-07
  • 2021-03-31
  • 2020-09-25
  • 1970-01-01
  • 2018-12-21
  • 2023-02-15
  • 2013-08-11
  • 1970-01-01
相关资源
最近更新 更多