if any()在Python中做什么?

2024-04-28 11:45:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我完全是初学者,所以尽量保持简单。我试图让这段特殊的代码正常工作,但我不明白这个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. 在


Tags: 代码intxtforifheretitleis
2条回答
if any(post.title in myline for myline in mylines)

mylines的任何元素是否包含post.title?对/错

参见:https://docs.python.org/2/library/functions.html#any

编辑:

post.title in myline for myline in mylines是一个生成器表达式,为了简化,我们可以说它类似于列表。在

假设post.titlefoo,而{}是{}。在

[post.title in myline for myline in mylines](将生成器转换为列表,也称为列表理解),可以为您提供

^{pr2}$

现在,根据我上面链接的文档,您可以将any重写为:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

返回False的唯一方法是如果iterable中的元素都是falsy(例如,FalseNone,空列表/dict/set/string等,0等)。在

上面所示的iterable包含值True,这不是一个错误的值。因此,any返回True。在

请尝试使您的代码有一点可读性。太多了,您仍然可以扩展下面的代码。在

import feedparser
d = feedparser.parse('feed0.rss', 'r')
with open("./mystuff.txt", 'r') as mystuff:
    lines = mystuff.readlines()
    for line in lines:
        for post in d.entries:  
            if (post.title in line):
                print("Here is one: {0} {1}".format(post.title, post.link))

之后你也可以关闭文件。关于第2点,括号中的最后一个for循环是完全错误的,它给了您多次相同的输出。 如果这能解决你的问题,请告诉我。在

您找到的行将单独工作,这是一种将所有内容压缩在一行中的短方法。在你应该只迭代文章之前:

^{pr2}$

mylines在哪里mystuff.readlines公司(). 希望这能帮助你理解。在

相关问题 更多 >