Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,if any()的作用是什么?_Python - Fatal编程技术网

在Python中,if any()的作用是什么?

在Python中,if any()的作用是什么?,python,Python,我完全是初学者,所以尽量简单。我试图使这个特定的代码工作,但我不明白,什么是真正发生在这个如果任何帖子。标题。。。循环 我试图从Reddit/r/learnpython那里得到答案的尝试失败了,希望这里的人能帮助我理解这一点 第二个问题是,这段代码打印出hereisone:+post.title+的次数与mystuff.txt中的行数相同 if any(post.title in myline for myline in mylines) mylines的任何元素是否包含post.title?

我完全是初学者,所以尽量简单。我试图使这个特定的代码工作,但我不明白,什么是真正发生在这个如果任何帖子。标题。。。循环

我试图从Reddit/r/learnpython那里得到答案的尝试失败了,希望这里的人能帮助我理解这一点

第二个问题是,这段代码打印出hereisone:+post.title+的次数与mystuff.txt中的行数相同

if any(post.title in myline for myline in mylines)
mylines的任何元素是否包含post.title?对/错

见:

编辑:

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

假设post.title是foo,myline是['foo','bar','foobar','barbaz']

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

[
    True,   # 'foo' is in 'foo'
    False,  # 'foo' is not in 'bar'
    True,   # 'foo' is in 'foobar'
    False   # 'foo' is not in 'barbaz'
]
现在,根据我上面链接的文档,您可以将任何内容重写为:

返回False的唯一方法是如果iterable中的所有元素都是falsy,例如False、None、空列表/dict/set/string等,0等


如上所示,我们的iterable包含值True,而不是false。因此,任何返回值都为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循环是完全错误的,它提供了多次相同的输出。 如果这能解决你的练习,请告诉我

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

for post in d.entries:
    if any(post.title in myline for myline in mylines):
        print("Here is one: {0} {1}".format(post.title, post.link))
其中mylines是mystuff.readlines。
希望这有助于您的理解。

查看mylines中的for mylines在该块中出现了多少次。使用for loop in mylines,它会在mylines中的每个条目中循环,并检查您是否在myline中有任何条目的post.title。但是你为什么要把它放在另一个循环里?+1只是想澄清一下,我从中得到了这一行的想法,它奏效了,但我不明白为什么。我编辑了我的答案,试图让事情更清楚。那有用吗?如果没有,您到底想知道什么?这段代码什么也不返回,尽管我在mystuff.txt中有一个匹配的标题,但它也返回xml提要的标题,每行一个字符:rss/xml来自这里@J.D.Joe:谢谢你的输入文件。因此,尝试使用lines=mystuff.readlines,然后对其进行迭代。如果mystuff是空的,那么当然不会有匹配的!!我认为您正在尝试匹配.rss中的某个标题,然后打印标题和链接。最后但并非最不重要的一点是,我在mystuff中尝试了世界XML教程,我得到了一个:XML教程。我希望这是你所期望的,否则我误解了你的疑问。再见,祝你过得愉快!!
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))
for post in d.entries:
    if any(post.title in myline for myline in mylines):
        print("Here is one: {0} {1}".format(post.title, post.link))