猿问

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

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

对于如何实际使用Python,我还没有找到一个可以理解的解释。itertools.groupby()功能。我想做的是:

  • 取一个列表-在本例中,对象化的子代。

    lxml

    元素
  • 根据某些标准将其划分为组
  • 然后分别对这些组进行迭代。

我已经复习过文献,和实例,但我很难把它们应用到一个简单的数字列表之外。

那么,我如何使用itertools.groupby()?我还应该用别的技术吗?对良好的“先决条件”阅读的指点也将受到赞赏。


繁花不似锦
浏览 1746回答 3
3回答

LEATH

重要说明:你不得不对数据进行排序第一。我没有理解的部分是在示例构造中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 + "."这将给出输出:动物:熊和鸭子。植物:仙人掌。车辆:快艇和校车。

神不在的星期二

你能给我们看看你的密码吗?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方法实际上只是遍历一个列表,每当键发生更改时,它就会创建一个新的组。

红糖糍粑

使用groupby的一个新技巧是在一行中运行长度编码:[(c,len(list(cgen))) for c,cgen in groupby(some_string)]将给出一个二元组的列表,其中第一个元素是char,第二个元素是重复次数。编辑:请注意,这是区分itertools.groupby从SQLGROUP BY语义:迭代工具不会(通常也不能)提前对迭代器进行排序,所以具有相同“键”的组不会合并。
随时随地看视频慕课网APP

相关分类

Python
我要回答