Python:如何获得itertools\u石斑鱼的长度
我正在使用pythonitertools,并使用groupby按最后一个元素对一组对进行排序。我已经对它进行了排序,我可以很好地遍历这些组,但是我真的希望能够得到每个组的长度,而不必遍历每个组,增加一个计数器 该项目正在对一些数据点进行聚类。我正在使用成对的(numpy.array,int),其中numpy数组是一个数据点,整数是一个集群标签 这是我的相关代码: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
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,这非常有效!没问题-下面的答案建议了相同的解决方案,因此您可以接受其中一个,使其成为“答案”。祝你万事如意!这样一个优雅的总和解决方案!