list.count()表示当有两个项目时列表中的一个项目

Tor*_*ris 4 python list count python-3.x

我已经在python中编写了一些代码来删除列表中的唯一数字,因此给出了输入:

[1,2,3,2,1]

它应该回来

[1,2,2,1]

但我的计划回来了

[1,2,1]

我的代码是:

for i in data:
    if data.count(i) == 1:
        data.pop(i)
Run Code Online (Sandbox Code Playgroud)

我发现错误发生在if data.count(i) == 1:.它说明data.count(2) == 1清楚时,列表中有2个出现的数字2.我不明白为什么这会给出错误的答案

Pat*_*ner 6

如果你有一个很长的列表,你应该将所有数字放入一个Counter(可迭代) - 字典.

from collections import Counter
data = [1,2,3,2,1]
c = Counter(data)

cleaned = [x for x in data if c[x] > 1]

print(cleaned)
Run Code Online (Sandbox Code Playgroud)

这将通过list(O(n))的一次传递计算所有出现次数,并查找在创建的字典中出现的频率O(1).这比使用列表理解要快得多

result = [x for x in data if data.count(x) > 1]
Run Code Online (Sandbox Code Playgroud)

对于100个值的列表,它将通过100个值100次,计算其中每个值为O(n ^ 2) - 这是件坏事.

输出:

[1,2,2,1]
Run Code Online (Sandbox Code Playgroud)