【问题标题】:Python: return values from a loop without breaking outPython:从循环中返回值而不会中断
【发布时间】:2012-10-19 04:03:11
【问题描述】:

G'day,我有一个按地点分组的个人列表。我想生成一个新变量,根据他们的位置为每个人提供一个数字。我希望我的数据看起来像:

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)

这会打印出我想要的值,但是,当我将 return 放在那里时,它会跳出循环并仅返回第一个值。我想知道如何返回这些值,以便将它们作为新列添加到我的数据中?

我读到了产量?但不确定是否合适。感谢您的帮助!

干杯, 亚当

【问题讨论】:

    标签: python return return-value yield


    【解决方案1】:

    print(...) 替换为yield ...。那么你将有一个生成器,它会给你一个可迭代的。然后,您可以通过迭代结果将其转换为其他适当的数据结构。例如,要从生成器构造一个列表,您可以这样做:

    list(individual(nest))  #this is prefered
    

    在这种情况下迭代是隐式的......

    或(在这种情况下更迂回但可能提供更多信息):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2016-07-22
      • 2018-07-20
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多