gpt4 book ai didi

python - 如何最佳地计算python列表中的元素

转载 作者:太空狗 更新时间:2023-10-29 22:23:54 26 4
gpt4 key购买 nike

这与 here 几乎是同一个问题, 除了我问的是排序结果的最有效解决方案。

我有一个列表(大约 10 个整数,随机介于 0 和 12 之间),例如:

the_list = [5, 7, 6, 5, 5, 4, 4, 7, 5, 4]

例如,我想创建一个返回按第一个元素排序的元组(项目、计数)列表的函数

output = [(4, 3), (5, 4), (6, 1), (7, 2)]

到目前为止我用过:

def dupli(the_list):
return [(item, the_list.count(item)) for item in sorted(set(the_list))]

但是我调用这个函数差不多一百万次,我需要让它尽可能快(python)。因此我的问题是:如何让这个功能更省时? (内存呢?)

我试了一下,但没有什么明显的结果:

from timeit import Timer as T
number=10000
setup = "the_list=[5, 7, 6, 5, 5, 4, 4, 7, 5, 4]"

stmt = "[(item, the_list.count(item)) for item in sorted(set(the_list))]"
T(stmt=stmt, setup=setup).timeit(number=number)

Out[230]: 0.058799982070922852

stmt = "L = []; \nfor item in sorted(set(the_list)): \n L.append((item, the_list.count(item)))"
T(stmt=stmt, setup=setup).timeit(number=number)

Out[233]: 0.065041065216064453

stmt = "[(item, the_list.count(item)) for item in set(sorted(the_list))]"
T(stmt=stmt, setup=setup).timeit(number=number)

Out[236]: 0.098351955413818359

谢谢
克里斯托夫

最佳答案

更改排序位置可节省约 20%。

改变这个:

def dupli(the_list):
return [(item, the_list.count(item)) for item in sorted(set(the_list))]

对此:

def dupli(the_list):
count = the_list.count # this optimization added courtesy of Sven's comment
result = [(item, count(item)) for item in set(the_list)]
result.sort()
return result

之所以更快,是因为 sorted 迭代器必须创建一个临时列表,而对结果进行排序是就地排序。

编辑:这是另一种比原始方法快 35% 的方法:

def dupli(the_list):
counts = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for n in the_list:
counts[n] += 1
return [(i, counts[i]) for i in (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) if counts[i]]

注意:您可能希望随机化 the_list 的值。我的 dupli 最终版本使用其他随机数据集测试速度更快(import random; the_list=[random.randint(0,12) for i in xrange(10)] )

关于python - 如何最佳地计算python列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4456700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com