更快速地消除列表中的重复项

时间:2017-11-09 13:04:11

标签: python list optimization duplicates

我使用API​​从网站下载票号,然后计算我创建的只接受一个I​​D实例的数组中的唯一票证ID。

这很慢......我尝试过使用套装,情况更糟。我已经看到过提到其他工具,比如itertools,但没有明确解释我如何在类似于我的情况下使用它。

好的和坏的变量存储了一种我能说的发电机。非常感谢你的帮助!!!

    good = self._client.satisfaction_ratings(score="good",sort_order="asc",start_time=thirty_days,end_time=today)
    bad = self._client.satisfaction_ratings(score="bad", sort_order="asc", start_time=thirty_days, end_time=today)
    good_array = []
    bad_array = []
    for g in good:
        if g.ticket.id not in good_array:
            good_array.append(g.ticket.id)
    for b in bad:
        if b.ticket.id not in bad_array:
            bad_array.append(b.ticket.id)
    goodnum = len(good_array)
    badnum = len(bad_array)

2 个答案:

答案 0 :(得分:3)

if g.ticket.id not in good_array good_array作为list的{​​{1}}速度很慢,因为它使用线性搜索(我知道顺序并不重要)

使用set是保留唯一元素的完美方式(不能慢,你必须以错误的方式使用它们)

现在,只需删除循环并创建2个集合理解:

good_array = {g.ticket.id for g in good}
bad_array = {g.ticket.id for g in bad}

然后像你一样计算:

goodnum = len(good_array)
badnum = len(bad_array)

答案 1 :(得分:-1)

set是一个python数据类型,它不允许重复。 只需将好的和坏的列表设置为 -

unique_good = set(good)
unique_bad = set(bad)

你可以用与列表相同的方式获得集合的长度。