Python: return values from a loop without breaking out

笑着哭i 提交于 2019-12-01 04:44:23

问题


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


回答1:


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.


来源:https://stackoverflow.com/questions/13128428/python-return-values-from-a-loop-without-breaking-out

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!