2012-10-29 115 views
4

G'day,我有一個按地點分組的個人列表。我想產生一個新的變量,給每個人一個數字,依賴於他們的位置。我想我的數據看起來就像是:Python:從循環中返回值而不會突出

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

我寫了這個:

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) 

這打印出我想要的值,但是,當我把返回那裏爆發的循環並只返回第一個值。我想知道如何返回這些值,以便我可以將它們作爲新列添加到我的數據中?

我看過關於產量?但不確定是否合適。感謝您的幫助!

乾杯, 亞當

回答

5

yield ...取代print(...)。那麼你會有一個發電機,它會給你一個迭代。然後,您可以通過遍歷結果將其轉換爲其他適當的數據結構。例如,構建了發電機列表,你可以這樣做:

list(individual(nest)) #this is prefered 

凡迭代在這種情況下隱...

或(更迂迴的,但可能在此提供更多信息上下文):

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

@Marcin - 感謝您的更正。 – mgilson

+0

感謝您的支持! – Adam