Python: return values from a loop without breaking out
python, return, return-value, yield
Solution
replace `print(...)` with `yield ...`. then you'll have a generator which will give you an iterable. You can then turn that into some other appropriate data-structure by iterating over the result. For example, to construct a list from the generator, you could do:
list(individual(nest)) #this is prefered
Where the iteration is implicit in this case ...
or (the more round-about but possibly more informative in this context):
[ x for x in individual(nest) ] #This is just for demonstration.
Problem
G'day, I have a list of individuals that are grouped by place. I want to produce a new variable that gives a number to each individual dependant on their place. What I would like my data to look like is: ``` place individual here 1 here 2 here 3 there 1 there 2 somewhere 1 somewhere 2 ``` I have written this: ``` 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) ``` This prints out the values I want, however, when I put return in there it breaks out of the loop and only returns the first value. I was wondering how I could return these values, so that I can add them to my data as a new column? I read about yield? but was unsure if it is appropriate. Thank you for your help! Cheers, Adam