use*_*679 39 python group-by python-itertools
我正在使用Python itertools并使用groupby按最后一个元素对一堆对进行排序.我已经把它排序了,我可以很好地遍历组,但我真的很想能够得到每个组的长度,而不必遍历每个组,增加一个计数器.
该项目是集群的一些数据点.我正在使用(numpy.array,int)对,其中numpy数组是一个数据点,整数是一个簇标签
这是我的相关代码:
data = sorted(data, key=lambda (point, cluster):cluster)
for cluster,clusterList in itertools.groupby(data, key=lambda (point, cluster):cluster):
if len(clusterList) < minLen:
Run Code Online (Sandbox Code Playgroud)
在最后一行:if len(clusterList) < minLen:,我得到一个错误
'itertools._grouper'类型的对象没有len()
我查找了可用的操作_groupers,但找不到任何似乎提供组长度的内容.
kin*_*all 49
仅仅因为你打电话就clusterList不会成为一个清单!它基本上是一个懒惰的迭代器,根据需要返回每个项目.您可以将它转换为这样的列表,但是:
clusterList = list(clusterList)
Run Code Online (Sandbox Code Playgroud)
或者这样做,并一步到位:
length = len(list(clusterList))
Run Code Online (Sandbox Code Playgroud)
如果您不想占用将其作为列表的记忆,您可以这样做:
length = sum(1 for x in clusterList)
Run Code Online (Sandbox Code Playgroud)
请注意,原始迭代器将通过将其转换为列表或使用sum()公式来完全消耗.