not name example español python group-by itertools

python - example - nameerror: name ''itertools'' is not defined



Python: cómo obtener la longitud de itertools_grouper (2)

Estoy trabajando con itertools de Python y usando groupby para ordenar un grupo de pares por el último elemento. Lo he ordenado y puedo repetir iterativamente los grupos, pero me encantaría poder obtener la longitud de cada grupo sin tener que iterar a través de cada uno, incrementando un contador.

El proyecto agrupa algunos puntos de datos. Estoy trabajando con pares de (numpy.array, int) donde la matriz numpy es un punto de datos y el entero es una etiqueta de cluster

Aquí está mi código relevante:

data = sorted(data, key=lambda (point, cluster):cluster) for cluster,clusterList in itertools.groupby(data, key=lambda (point, cluster):cluster): if len(clusterList) < minLen:

En la última línea, ''if len (clusterList) <minLen:'', aparece el error de que el objeto de tipo ''itertools._grouper'' no tiene len ().

He buscado las operaciones disponibles para _groupers, pero no puedo encontrar nada que parezca proporcionar la longitud de un grupo.


¡Solo porque lo llame clusterList no lo convierte en una lista! Básicamente es un iterador perezoso que devuelve cada elemento según sea necesario. Sin embargo, puedes convertirlo en una lista como esta:

clusterList = list(clusterList)

O hacer eso y obtener su longitud en un solo paso:

length = len(list(clusterList))

Si no quiere ocupar el recuerdo de hacer una lista, puede hacer esto en su lugar:

length = sum(1 for x in clusterList)

Tenga en cuenta que el iterador original se consumirá por completo ya sea convirtiéndolo a una lista o utilizando la formulación de sum() .


clusterList es iterable pero no es una list . Esto puede ser un poco confuso a veces. Puede hacer un ciclo for sobre clusterList pero no puede hacer otras cosas sobre él (slice, len, etc.).

Solución: asigne el resultado de list(clusterList) a clusterList .