首页 > 解决方案 > 优化列表中出现的计数

问题描述

我需要在 .CVS 文件中找到最流行的 pub 名称。我现在这样做的方式是通过 pub 名称列表来检查它是否已经存在,如果是,则将一个添加到辅助值,如果不是,则添加它。IE

pub_names = [["Inn",1]]
add "Inn"
pub_names = [["Inn",2]]
add "Pub"
pub_names = [["Inn,2"]["Pub",1]]

(稍后我将按大小对它们进行排序)
问题是这非常慢,因为我有 50,000 个条目,并且想知道是否有优化它的方法。第二次检查 1 条目以查看名称是否重复,但第 20,000 次检查 19,999 是否为 20,001 20,000,依此类推。

import csv
data = list(csv.reader(open("open_pubs.csv")))
iterdata = iter(data)
next(iterdata)
pub_names = []
for x in iterdata:
    for i in pub_names:
        if x[1] == i[0]:
            i[1] += 1

        full_percent = (data.index(x) / len(data))*100
        sub_percent = (pub_names.index(i) / len(pub_names))*100
        print("Total =",str(full_percent)+"%","Sub =",str(sub_percent)+"%")

    else:
        pub_names += [[x[1],1]]

CSV 文件:https ://www.kaggle.com/rtatman/every-pub-in-england#open_pubs.csv

标签: python

解决方案


字典提供了更快的元素访问和更简洁的代码:

pubs = {
    "Inn": 2,
    "Pub": 1
}

pubname = "Tavern"
if pubname in pubs:
    pubs[pubname] += 1
else:
    pubs[pubname] = 1

推荐阅读