“ NoneType”对象在while循环内不可迭代

时间:2020-03-04 11:05:36

标签: python-3.x

我在以下函数中出错,该函数为lambda x: f'{x:b}'。 当我将'NoneType' object is not iterable函数放在循环外时,它可以正常工作,为什么它在这里不起作用?

print(max())

2 个答案:

答案 0 :(得分:0)

freq是循环之前的列表,然后在循环的第一次迭代中调用

        while (sum<target):
            sum+=max(freq) #error thrown here
            res.append(max(freq))
            freq=freq.remove(max(freq))

列表的remove方法始终返回None。因此,您基本上将此None存储为freq的值。因此,现在您已将频率从列表更改为无。因此,在下一次迭代中,您会得到错误。

仅调用freq.remove(max(freq))本身就不会尝试将结果分配给freq

        while (sum<target):
            sum+=max(freq) #error thrown here
            res.append(max(freq))
            freq.remove(max(freq))

答案 1 :(得分:0)

请检查一下。您在 freq = freq.remove(max(freq))中出错。无需分配回相同的freq变量。因为在脚本运行之前,该列表对象的id保持不变。

def minSetSize(arr) -> int:
    target = len(arr) / 2
    sum = 0
    res = []
    hash_dict = {x: arr.count(x) for x in arr}
    freq = list(hash_dict.values())
    while sum < target:
        sum += max(freq)
        res.append(max(freq))
        freq.remove(max(freq)) # error was here  here
    return len(res)

print(minSetSize([1,2,5,7,3, 53]))