gpt4 book ai didi

Python:按投影值的相等性将列表分组为子列表

转载 作者:太空狗 更新时间:2023-10-30 01:43:26 26 4
gpt4 key购买 nike

是否有一种很好的 pythonic 方式将列表分组为列表的列表,其中每个内部列表仅包含那些具有相同投影的元素,由用户定义为函数?

例子:

>>> x = [0, 1, 2, 3, 4, 5, 6, 7]
>>> groupby(x, projection=lambda e: e % 3)
[[0, 3, 6], [1, 4, 7], [2, 5]]

我不关心投影本身,只是如果它对于某些元素是相等的,那么这些元素必须最终出现在同一个子列表中。

我基本上是在寻找与 haskell 函数 GHC.Exts.groupWith 等效的 python :

Prelude> import GHC.Exts
Prelude GHC.Exts> groupWith (`mod` 3) [0..7]
[[0,3,6],[1,4,7],[2,5]]

最佳答案

标准库中的 itertools 模块包含一个 groupby()应该做你想做的功能。

请注意,groupby() 的输入应按组键排序,以便每个组只产生一次,但使用相同的键函数进行排序很容易。因此,如果您的关键函数(投影)正在查看数字是否为偶数,则它看起来像这样:

from itertools import groupby
x = [0, 1, 2, 3, 4, 5, 6, 7]

def projection(val):
return val % 3

x_sorted = sorted(x, key=projection)
x_grouped = [list(it) for k, it in groupby(x_sorted, projection)]
print(x_grouped)

[[0, 3, 6], [1, 4, 7], [2, 5]]

请注意,虽然此版本仅使用标准 Python 功能,但如果您处理的值可能超过 100.000 个,则应查看 pandas(请参阅@ayhan 的回答)

关于Python:按投影值的相等性将列表分组为子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568763/

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