You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python执行列表元素存在判断时出现int不可迭代TypeError报错

报错原因
  • 核心错误来自第32行的赋值逻辑错误:你初始定义covered是长度等于木板数量的列表,用来标记每块木板是否被钉住,但代码中写的是if nail in intervals[j]: covered=1,直接把整个covered变量重写为整数1。下一轮while循环执行0 in covered判断时,需要对covered做迭代检查成员,而整数是不可迭代类型,因此触发TypeError: argument of type 'int' is not iterable。
  • 你在终端执行not (0 in covered)得到False是执行时机导致的:该命令是在covered还没有被错误重写为整数时运行的,此时covered仍为列表类型,因此可以正常做成员检查。
修复方案
  1. 修正覆盖状态的赋值逻辑,把整行if nail in intervals[j]: covered=1改为if nail in intervals[j]: covered[j] = 1,仅修改对应下标木板的覆盖标记,不要重写整个covered变量。
  2. 补充最优钉子的取值逻辑:你遍历完所有钉子找到覆盖最多木板的maxIndex后,没有重新读取对应位置的钉子值,内层遍历结束后nail变量存储的是最后一次遍历的钉子值,不是选中的最优钉子,需要在nails.append(maxIndex)之后新增一行nail = C[maxIndex],否则后续覆盖判断会使用错误的钉子值。

修复后的完整代码如下:

def NailingPlanks(A,B,C):
    numInervals = len(A)
    maxNails = len(C)
    
    intervals = []
    covered = [0]*numInervals
    
    for i in range(numInervals):
        interval = []
        for j in range(A[i],B[i]+1): interval.append(j)
        intervals.append(interval)
        
    nails = []
    nailUsed = [False] * maxNails
    print('covered = ', covered)
    while (0 in covered):
        MaxCovered = 0
        maxIndex = -1
        for i in range(maxNails):
            if not nailUsed[i]:
                nail = C[i]
                cnt = 0
                for j in range(numInervals):
                    if covered[j]==0 and nail in intervals[j]: cnt += 1
                if cnt>MaxCovered:
                    MaxCovered = cnt
                    maxIndex = i
        if maxIndex == -1: # 没有钉子能覆盖剩余木板,提前退出避免死循环
            return -1
        nails.append(maxIndex)
        nailUsed[maxIndex] = True
        nail = C[maxIndex] # 补充取选中的钉子值
        for j in range(numInervals):
            if covered[j] == 0 and nail in intervals[j]: 
                covered[j] = 1 # 修正赋值逻辑
            
    print('nails=', nails)
    return len(nails)

额外优化说明:新增了无可用钉子时的提前退出逻辑,避免出现剩余木板无法被任何钉子覆盖时的死循环问题。

内容的提问来源于stack exchange,提问作者OtagoHarbour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:24:01