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.我不明白为什么这会给出错误的答案
如果你有一个很长的列表,你应该将所有数字放入一个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)
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |