当我调用list.count()函数时出现AttributeError

时间:2019-05-18 15:32:58

标签: python non-type

我正在CodeWars中解决一些katas,在当前katas中,我试图获取在我设置为参数的列表中某个元素发生了多少次,然后将其用作for循环的范围

但是,当我调用该函数时,它会返回:

File "<pyshell#8>", line 3, in delete_nth 
if order.count(item) > max_e:
    AttributeError: 'NoneType' object has no attribute 'count' 

这是我的代码

def delete_nth(order,max_e):
    for item in order:
        if order.count(item) > max_e:
            for i in range(order.count(item) - max_e):
                order = order.remove(item)
    return order

l = [20,37,20,21]
delete_nth(l,1) #except [20,37,21]

2 个答案:

答案 0 :(得分:1)

问题是这个陈述 order = order.remove(item) 删除项目后,您无需重新分配列表。 并且list.remove返回None,它是导致错误的原因。

因此将其编辑为: order.remove(item)

答案 1 :(得分:0)

问题在于,即使您正在迭代order,也要对其进行更改。您不应该这样做。如果要创建现有列表的副本并进行修改。

remove函数不会返回任何内容,因此实际上没有任何内容被分配给order

def delete_nth(order,max_e):
    for item in order:
        if order.count(item) > max_e:
            for i in range(order.count(item) - max_e):
                order = order.remove(item) ======> order becomes None as remove returns None.
    return order