为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Python的itertools.groupby()?

如何使用Python的itertools.groupby()?

繁花不似锦 2019-06-19 16:55:44
如何使用Python的itertools.groupby()?对于如何实际使用Python,我还没有找到一个可以理解的解释。itertools.groupby()功能。我想做的是:取一个列表-在本例中,对象化的子代。lxml元素根据某些标准将其划分为组然后分别对这些组进行迭代。我已经复习过文献,和实例,但我很难把它们应用到一个简单的数字列表之外。那么,我如何使用itertools.groupby()?我还应该用别的技术吗?对良好的“先决条件”阅读的指点也将受到赞赏。
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

重要说明:你不得不对数据进行排序第一。


我没有理解的部分是在示例构造中

groups = []uniquekeys = []for k, g in groupby(data, keyfunc):
   groups.append(list(g))    # Store group iterator as a list
   uniquekeys.append(k)

k是当前分组键,并且g是一个迭代器,您可以使用它来迭代由该分组键定义的组。换句话说,groupby迭代器本身返回迭代器。

这里有一个例子,使用更清晰的变量名称:

from itertools import groupby

things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"),
 ("vehicle", "school bus")]for key, group in groupby(things, lambda x: x[0]):
    for thing in group:
        print "A %s is a %s." % (thing[1], key)
    print " "

这将给出输出:

熊是动物。
鸭子是动物。

仙人掌是一种植物。

快艇是一种交通工具。
校车就是一辆车。

在这个例子中,things是元组的列表,每个元组中的第一个项是第二个项所属的组。

这个groupby()函数采用两个参数:(1)数据分组;(2)函数对其进行分组。

这里,lambda x: x[0]诉说groupby()若要将每个元组中的第一个项用作分组键,请执行以下操作。

在上面for声明,groupby返回三个(键,组迭代器)对-每个唯一的键一次。您可以使用返回的迭代器对该组中的每个单独项进行迭代。

下面是一个与相同数据略有不同的示例,使用列表理解:

for key, group in groupby(things, lambda x: x[0]):
    listOfThings = " and ".join([thing[1] for thing in group])
    print key + "s:  " + listOfThings + "."

这将给出输出:

动物:熊和鸭子。
植物:仙人掌。
车辆:快艇和校车。


查看完整回答
反对 回复 2019-06-19
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

你能给我们看看你的密码吗?

Python文档上的示例非常简单:

groups = []uniquekeys = []for k, g in groupby(data, keyfunc):
    groups.append(list(g))      # Store group iterator as a list
    uniquekeys.append(k)

因此,在您的例子中,数据是一个节点列表,keyfunc是标准函数的逻辑所在,然后groupby()分组数据。

你必须小心数据排序根据你打电话之前的标准groupby否则就没用了。groupby方法实际上只是遍历一个列表,每当键发生更改时,它就会创建一个新的组。


查看完整回答
反对 回复 2019-06-19
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

使用groupby的一个新技巧是在一行中运行长度编码:

[(c,len(list(cgen))) for c,cgen in groupby(some_string)]

将给出一个二元组的列表,其中第一个元素是char,第二个元素是重复次数。

编辑:请注意,这是区分itertools.groupby从SQLGROUP BY语义:迭代工具不会(通常也不能)提前对迭代器进行排序,所以具有相同“键”的组不会合并。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 1745 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信