为了账号安全,请及时绑定邮箱和手机立即绑定

python嵌套的生成器对象内容

python嵌套的生成器对象内容

Helenr 2021-03-14 16:17:43
我的Python有问题。我试图了解哪些信息存储在我发现是生成器的对象中。我对Python一无所知,但是我必须了解这段代码的工作原理才能将其转换为Java。代码如下:def segment(text):    "Return a list of words that is the best segmentation of text."    if not text: return []    candidates = ([first]+segment(rem) for first,rem in splits(text))    return max(candidates, key=Pwords)def splits(text, L=20):    "Return a list of all possible (first, rem) pairs, len(first)<=L."    pairs = [(text[:i+1], text[i+1:]) for i in range(min(len(text), L))]    return pairsdef Pwords(words):     "The Naive Bayes probability of a sequence of words."    productw = 1    for w in words:      productw = productw * Pw(w)    return productw虽然我了解了Pwords和split方法的工作原理(函数Pw(w)只是从矩阵中获取一个值),但我仍在尝试了解“ segment”方法中“ candidates”对象的构建方式,以及它包含。以及“ max()”函数如何分析此对象。我希望有人能帮助我,因为我在这里找不到任何可行的解决方案来打印此对象。非常感谢大家。毛罗
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

生成器是相当简单的抽象。它看起来像一次性使用的自定义迭代器。


gen = (f(x) for x in data)

表示gen是迭代器,每个下一个值等于f(x),其中x是数据的对应值


嵌套生成器类似于列表推导,但有很小的区别:


它是一次性的

它不会创建整个序列

代码仅在迭代期间运行

为了更容易调试,您可以尝试用列表理解替换嵌套生成器


def segment(text):

    "Return a list of words that is the best segmentation of text."

    if not text: return []

    candidates = [[first]+segment(rem) for first,rem in splits(text)]

    return max(candidates, key=Pwords)


查看完整回答
反对 回复 2021-03-24
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信