gpt4 book ai didi

python - uniq、groupby 的用例,无需排序

转载 作者:行者123 更新时间:2023-12-01 00:43:12 25 4
gpt4 key购买 nike

在调试 Python 程序时,我最近发现 Python itertools#groupby()函数需要对输入集合进行排序,因为它只对序列中出现的相同元素进行分组:

Generally, the iterable needs to already be sorted on the same key function.

The operation of groupby() is similar to the uniq filter in Unix


在这两种情况下, uniq和 Python 的 groupby() ,我想知道在没有排序的情况下应用这些用例可能是什么。
显然,排序可能很昂贵,应尽可能避免。但是,如果排序在实践中显然是不可避免的,那么为什么 Python 开发人员决定不将其设为 groupby() 中的默认值? ?这似乎引起了很多 confusion在该功能的用户中。
我注意到这个设计决定似乎并不普遍。 Scala 之类的语言似乎在其 groupBy() 中对集合进行了隐式排序。职能。
因此,我的问题是:哪些用例导致了在 uniq 和 Python 的 groupby() 中不隐式排序的设计决策?

最佳答案

您可以使用具有内部副作用的理解来对迭代器进行分组,而无需排序(并且不使用库),如下所示:

from random import randrange
source = ( randrange(20) for _ in range(20) )
getKey = lambda n: n % 5
grouped, = ([d][any(d.setdefault(getKey(v),[]).append(v) for v in source)] for d in [dict()])

print(grouped)
# {2: [17, 2, 17, 17, 17], 1: [1, 11, 1, 16, 1], 4: [19, 19, 14, 19, 9], 3: [3, 3], 0: [0, 10, 5]}

关于python - uniq、groupby 的用例,无需排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56507092/

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