gpt4 book ai didi

python-3.x - 有没有一种有效的方法来过滤列表中的最大数字

转载 作者:行者123 更新时间:2023-12-04 12:55:15 25 4
gpt4 key购买 nike

我只是想知道是否有更好的方法来查找列表中的所有最大数字。
例如,我有一个字典列表。它有一个键(“info”)和对应的字典值,如下所示。我想找到最大数 s (“计数”)来自该列表。一旦找到最大数量,就必须确定该元素的相应“代码”。
我可以按如下方式执行此操作,但是对于非常大的列表,执行时间会很长。

codes = [{"code": 1, "info": {"status": "running", "count": 4}},
{"code": 2, "info": {"status": "running", "count": 1}},
{"code": 3, "info": {"status": "running", "count": 2}},
{"code": 4, "info": {"status": "running", "count": 4}},
{"code": 5, "info": {"status": "running", "count": 4}}
]
count_max = 0
filtered_codes = []
for i in range(len(codes)):
if codes[i]['info']['count'] == count_max:
filtered_codes.append(codes[i]['code'])
if codes[i]['info']['count'] > count_max:
filtered_codes.clear()
filtered_codes.append(codes[i]['code'])
count_max = codes[i]['info']['count']
print(filtered_codes)
输出:
[1, 4, 5] #1,4,5 是 count == 4 的字典的代码(所有计数中的最大值)
那么,有没有更好的方法来做到这一点?可能正在使用过滤器、lambda、max 之类的?
编辑:有人发布了以下代码作为答案,后来被删除了
max_count = max(info["info"]["count"] for info in codes)
filtered_codes = [val["code"] for val in filter(lambda x: x["info"]["count"] == max_count, codes)]
所以我在长度列表中运行了两个代码 1000000
我发布的第一种方法采用了:1.4539954662322998s
采取的第二种方法:0.4440000057220459s
那么第二种方法是最佳解决方案吗?

最佳答案

您的代码是执行此操作的最渐进有效的方法。你的代码也很好,因为它可以对流进行操作——使用 max然后 filter需要多次通过。使用这些内置函数的好处是可读性。
如果你真的需要性能,你可能想使用像 numpy 这样的库或用 C 编写代码。
更新的问题:
是的,我的意思是它们都是渐近的线性时间。在现实世界中哪个更快取决于您看到的输入类型,以及缓存和解释器的怪癖。例如,对于像 count = [1,1,1,1,1,1,...,1,2] 这样的特定数据集,第二个肯定会更快。 .第一个例子是通过慢速网络从远程服务流式传输 10TiB 随机输入列表的方式。要进行真正的比较,您需要定义要测试的数据集空间。
解决方案 2 是您生成的输入数据的“最佳”吗?嗯,我的意思是有更多的优化方法——例如,一旦确定了最大值,您就可以启动线程并对输入列表进行分区以进行过滤。取决于你想走多远。
我个人更愿意写(和读)第二个例子。因为它有效并且易于理解。更进一步,使用 if 可能更惯用。而不是 filter在理解中,即

max_count = max(info["info"]["count"] for info in codes)
filtered_codes = [val["code"] for val in codes if val["info"]["count"] == max_count]
就像我之前说的,如果你真的关心大数据的超高性能,你显然不想使用纯 Python。

关于python-3.x - 有没有一种有效的方法来过滤列表中的最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68306309/

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