![](/img/trans.png)
[英]Why does pdb give NameError for variables referenced in “if” clause of list comprehension?
[英]Why does list comprehension give me item not defined error?
我有一个pandas.Series
的spacy.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.