我完全是初学者,所以尽量保持简单。我试图让这段特殊的代码正常工作,但我不明白这个if any(post.title...
循环中到底发生了什么。在
import feedparser
d = feedparser.parse('feed0.rss', 'r')
with open("./mystuff.txt", 'r') as mystuff:
mylines = mystuff.readlines()
for post in d.entries:
for myline in mylines:
---> if any(post.title in myline for myline in mylines):
print( "Here is one: " + post.title + " " + post.link )
我试图从Reddit(/r/learnpython
)那里得到答案的尝试失败了,希望这里有人能帮助我理解这一点。在
第二个问题是,这段代码打印"Here is one: " + post.title +
的次数与中的行数相同mystuff.txt. 在
mylines
的任何元素是否包含post.title
?对/错参见:https://docs.python.org/2/library/functions.html#any
编辑:
post.title in myline for myline in mylines
是一个生成器表达式,为了简化,我们可以说它类似于列表。在假设}是{}。在
post.title
是foo
,而{
^{pr2}$[post.title in myline for myline in mylines]
(将生成器转换为列表,也称为列表理解),可以为您提供现在,根据我上面链接的文档,您可以将
any
重写为:返回
False
的唯一方法是如果iterable中的元素都是falsy(例如,False
,None
,空列表/dict/set/string等,0等)。在上面所示的iterable包含值
True
,这不是一个错误的值。因此,any
返回True
。在请尝试使您的代码有一点可读性。太多了,您仍然可以扩展下面的代码。在
之后你也可以关闭文件。关于第2点,括号中的最后一个for循环是完全错误的,它给了您多次相同的输出。 如果这能解决你的问题,请告诉我。在
您找到的行将单独工作,这是一种将所有内容压缩在一行中的短方法。在你应该只迭代文章之前:
^{pr2}$mylines在哪里mystuff.readlines公司(). 希望这能帮助你理解。在
相关问题 更多 >
编程相关推荐