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
.