繁体   English   中英

为什么列表理解会给我项目未定义错误?

[英]Why does list comprehension give me item not defined error?

我有一个pandas.Seriesspacy.tokens.doc.Doc并且我正在运行这个 for 循环:

for doc in docs:
    print([(x.text, x.label_) for x in doc.ents])

但是当我尝试将其转换为列表理解时: [(x.text, x.label) for x in doc.ents for doc in docs]

它抛出这个错误:

名称“doc”未定义

我理解这个错误,但是当我在列表理解中定义它时,为什么它说 doc 未定义?

您的调用文档在定义之前。

[(x.text, x.label) for doc in docs for x in doc.ents]

这也是我犯的列表理解的一个典型错误。
但你不能为此受到责备。 if/else/for 在这些中的排序方式很可能有一个逻辑,但我的 go 方法是尝试一个简单的示例来获得正确的序列。

例如,如果列表推导中有一个 if 条件,你可以写成,

Y = [x if (some_condition) for x in Xs]

到目前为止,一切都很好。 但是如果里面有一个 else 语句,这将变成类似

Y = [x1 for x1,x2 in Xs if (some_condition) else x2]

你看 if 是现在之后的 for。
双 for 循环也是如此。 你可以简单地尝试

foo = [c for c in bar for bar in ["foo", "bar"]]

foo = [c for bar in ["foo", "bar"] for c in bar]

和 go 与任何工作。 这比记住它容易。 或者只是记住,对于 double for,如果一个序列不起作用,则相反

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM