Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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:如何获得itertools\u石斑鱼的长度_Python_Group By_Itertools - Fatal编程技术网

Python:如何获得itertools\u石斑鱼的长度

Python:如何获得itertools\u石斑鱼的长度,python,group-by,itertools,Python,Group By,Itertools,我正在使用pythonitertools,并使用groupby按最后一个元素对一组对进行排序。我已经对它进行了排序,我可以很好地遍历这些组,但是我真的希望能够得到每个组的长度,而不必遍历每个组,增加一个计数器 该项目正在对一些数据点进行聚类。我正在使用成对的(numpy.array,int),其中numpy数组是一个数据点,整数是一个集群标签 这是我的相关代码: data = sorted(data, key=lambda (point, cluster):cluster) for cluste

我正在使用pythonitertools,并使用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:
data=sorted(数据,key=lambda(点,簇):簇)
对于集群,itertools.groupby中的clusterList(数据,key=lambda(点,集群):集群):
如果len(clusterList)
在最后一行:
如果len(clusterList)
,我得到一个错误

“itertools.\u grouper”类型的对象没有len()


我已经查找了可用于
\u groupers
的操作,但找不到任何似乎能提供组长度的操作。

仅仅因为您称其为
clusterList
并不能将其作为列表!它基本上是一个惰性迭代器,根据需要返回每个项。您可以将其转换为如下列表:

clusterList = list(clusterList)
或者这样做,一步就能得到它的长度:

length = len(list(clusterList))
如果您不想占用将其列为列表的内存,可以这样做:

length = sum(1 for x in clusterList)

请注意,原始迭代器将完全通过将其转换为列表或使用
sum()
公式来使用。

clusterList
iterable
,但它不是
列表。这有时会有点令人困惑。您可以对
执行
循环
clusterList
,但不能在其上执行其他列表操作(切片、len等)

修复:将
list(clusterList)
的结果分配给
clusterList

您可以使用它。方法
count()

基数:确定并检查任何iterable的大小

以下代码给出了
clusterList

import cardinality
cardinality.count(clusterList)

可能有更好的方法,但您可以将iterable转换为列表并计算元素(
if len(list(clusterList))
)。谢谢,RocketDonkey,这非常有效!没问题-下面的答案建议了相同的解决方案,因此您可以接受其中一个,使其成为“答案”。祝你万事如意!这样一个优雅的总和解决方案!