【问题标题】:How to spot mistake in code (TypeError: 'int' object is not iterable)?如何发现代码中的错误(TypeError: \'int\' object is not iterable)?
【发布时间】:2022-11-14 01:05:53
【问题描述】:
block = [(1, 2), (6, 6), (8, 10), (13, 14)]

def add_line(block, y):
    added_line = []
    for (x1, x2) in block:
        added_line += zip((x1, x2), y)

    return added_line

它应该将 y 添加到 (x1, x2) 元组。相反,它会产生 TypeError: 'int' object is not iterable。我做错了什么,在哪里?

【问题讨论】:

  • 你在打电话吗add_line以整数作为第二个参数?您可能应该展示如何调用该函数以及您期望的输出。你说你想向元组添加一些东西。你知道元组是不可变的吗?

标签: python typeerror


【解决方案1】:

这是因为您在 zip 函数中提供了一个 int 对象(y)。 zip 函数采用可迭代对象。

你可以这样做


block = [(1, 2), (6, 6), (8, 10), (13, 14)]

def add_line(block, y):
    added_line = []
    for (x1, x2) in block:
        added_line += zip((x1, x2), [y])

    return added_line

print(add_line(block, 1))

【讨论】:

  • 你确定那是 OP 想要的吗?
【解决方案2】:

这是我对“应该将 y 添加到 (x1, x2) 元组”的解释

block = [(1, 2), (6, 6), (8, 10), (13, 14)]

def add_line(block, y):
    return [(*t, y) for t in block]

print(add_line(block, 9))

输出:

[(1, 2, 9), (6, 6, 9), (8, 10, 9), (13, 14, 9)]

【讨论】:

    【解决方案3】:
    block = [(1, 2), (6, 6), (8, 10), (13, 14)]
    
    def add_line(block, y):
        added_line = []
        for x_coord in block:
            added_line += zip(x_coord, [y])
    
        return added_line
    

    由于问题中没有提到,我假设x1x2y 是某种坐标。 zip() 需要可以迭代的对象,例如列表、字符串等。所以将 y 设置为 [y] 可以解决问题

    【讨论】:

    • 什么是是的在这种情况下?
    猜你喜欢
    • 2022-12-15
    • 2022-08-18
    • 2018-06-29
    • 2019-04-12
    • 2016-02-18
    • 2022-11-02
    • 2019-09-21
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多