我是python的新手,在阅读BeautifulSoup教程时,我不明白这个表达“[x for x in titles if x.findChildren()] [: - 1]”我不明白?你能解释一下吗
titles = [x for x in titles if x.findChildren()][:-1]
答案 0 :(得分:5)
以[:-1]开头,这将提取一个包含除最后一个元素之外的所有元素的列表。
>>> a=[1,2,3,4,5]
>>> a[:-1]
[1, 2, 3, 4]
第一部分是将列表提供给[:-1](在python中切片)
[x for x in titles if x.findChildren()]
这将生成一个列表,其中包含列表“titles”中的所有元素(x),它们满足条件(对于x.findChildren()返回True)
答案 1 :(得分:4)
这几乎相当于:
def f():
items = []
for x in titles:
if x.findChildren():
items.append(x)
return items[:-1]
titles = f()
我最喜欢的Python功能之一:)
答案 2 :(得分:2)
表达式f(X) for X in Y if EXP
是list comprehension它将为您提供一个生成器(如果它在()
内)或一个包含结果的列表(如果它在[]
内)评估f(X)
的每个元素的Y
,仅当EXP
为X
时才为{。}}。
在你的情况下,如果元素有一些孩子,它将返回一个包含titles
中每个元素的列表。
结尾[:-1]
表示列表中除最后一个元素之外的所有内容。
答案 3 :(得分:1)
它被称为理解表达。它只是构建x
列表中所有标题的列表,当true
函数被调用时,它返回findChildren
。最后的陈述从列表中减去最后一个。