Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于连续属性值对对象(元组)进行分组?_Python_Python 3.x_Grouping - Fatal编程技术网

Python 如何基于连续属性值对对象(元组)进行分组?

Python 如何基于连续属性值对对象(元组)进行分组?,python,python-3.x,grouping,Python,Python 3.x,Grouping,我在这里发现了一个类似的问题: 它讨论了按相似属性对元组列表进行分组。我有一个物品清单;这些对象有一个“day”属性,我想根据这些对象是否具有连续的“day”值对它们进行分组。 e、 g 输出: [[('a',12),('b',13)],[('c',15),('d',16),('e',17)]] 您可以执行以下操作: from itertools import groupby, count from operator import itemgetter data = [('a', 12),

我在这里发现了一个类似的问题: 它讨论了按相似属性对元组列表进行分组。我有一个物品清单;这些对象有一个“day”属性,我想根据这些对象是否具有连续的“day”值对它们进行分组。 e、 g

输出:

[[('a',12),('b',13)],[('c',15),('d',16),('e',17)]]

您可以执行以下操作:

from itertools import groupby, count
from operator import itemgetter

data = [('a', 12), ('b', 13), ('c', 15), ('c', 16), ('c', 17)]


def key(i, cursor=count(0)):
    """Generate the same key for consecutive numbers"""
    return i[1] - next(cursor)


ordered = sorted(data, key=itemgetter(1))

result = [list(group) for _, group in groupby(ordered, key=key)]
print(result)
输出

[[('a', 12), ('b', 13)], [('c', 15), ('c', 16), ('c', 17)]]
以上内容基于Python 2.6文档中的一个旧示例

为了更好地说明发生了什么,请参见以下示例:

lst = [12, 13, 15, 16, 17]
print([v - i for i, v in enumerate(lst)])
生成的密钥是:

[12, 12, 13, 13, 13]

如图所示,连续跑步的关键点相同。

谢谢您的回答。当我将其应用于代码时,它抛出以下错误:TypeError:“NameOfObject”对象不支持indexingHi,这一定是因为NameOfObject不是元组,如您的示例所示。使用attrgetter代替itemgetter
[12, 12, 13, 13, 13]