python循环中断,Python:从循环返回值而不会中断

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

解决方案

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值