Python: devuelve valores de un bucle sin interrumpir

Día, tengo una lista de individuos agrupados por lugar. Quiero producir una nueva variable que dé un número a cada individuo dependiendo de su lugar. Cómo me gustaría que se vieran mis datos es:

place individual here 1 here 2 here 3 there 1 there 2 somewhere 1 somewhere 2 

He escrito esto:

  nest="ddd", "ddd", "fff", "fff", "fff", "fff", "qqq", "qqq" def individual(x): i = 0 j = 1 while i < len(x): if x[i] == x[i-1]: print(j+1) i = i + 1 j = j + 1 else: print(1) i = i + 1 j = 1 individual(nest) 

Esto imprime los valores que quiero, sin embargo, cuando pongo el retorno allí, se sale del bucle y solo devuelve el primer valor. Me preguntaba cómo podría devolver estos valores para poder agregarlos a mis datos como una nueva columna.

Leí sobre el rendimiento? pero no estaba seguro de si es apropiado. ¡Gracias por tu ayuda!

Saludos, Adam

Reemplazo de print(...) con yield ... entonces tendrás un generador que te dará un iterable. Luego puede convertir eso en alguna otra estructura de datos apropiada iterando sobre el resultado. Por ejemplo, para construir una lista desde el generador, podría hacer:

 list(individual(nest)) #this is prefered 

Donde la iteración es implícita en este caso …

o (el más redondo pero posiblemente más informativo en este contexto):

 [ x for x in individual(nest) ] #This is just for demonstration.