1

我正在尝试定义一个函数,该函数接受两个输入,一个列表和一个项目(可以是字符串、int、float),它返回项目出现在列表中的次数。这是我的代码:

def count(sequence,item):
    for all x in sequence:
        if x != item:
            while x in sequence:
                sequence.remove(x)
    return len(sequence)

但是,这只会删除不等于序列中项目的第一个元素并将其删除。例如,count([4,8,3],3) 返回 2,因为它只从列表中删除 4。我认为 for 循环应该解决这个问题。

有什么建议么?

4

2 回答 2

3

就这么简单,使用count方法:

the_list.count(the_item)

从文档中:

list.count(x)返回 x 在列表中出现的次数。

例如:

[1, 2, 3, 1, 4].count(1)
=> 2

顺便说一句 - 我不明白,你为什么要删除一个应该简单地计算它们的函数中的元素?

于 2013-03-19T23:59:08.130 回答
0

迭代列表并更改此列表的长度时很危险(您使用 remove())

在您的情况下,当您迭代列表“序列”时,首先您将获得序列 [0](即 4)。然后你删除它。然后,您将获得序列[1]。您假设 sequence[1] 是 8。但是,因为您之前删除了 4,所以现在 sequence[0] 是 8,而 sequence[1] 是 3。所以你得到的不是 8,而是 3。这就是为什么你不能删除8 从序列。你忽略它。

于 2013-03-20T05:16:41.547 回答