2010-09-02 41 views
2

我是python中的新成员,在阅读BeautifulSoup教程时,我并不理解这个表达式“[x for x.findChildren()] [: - 1]理解?你能解释一下吗?python表达式

titles = [x for x in titles if x.findChildren()][:-1] 

回答

5

以[:-1]开头,这将提取一个包含除最后一个元素以外的所有元素的列表。

>>> a=[1,2,3,4,5] 
>>> a[:-1] 
[1, 2, 3, 4] 

该而来的第一部分,供给列表以[:-1](在python切片)

[x for x in titles if x.findChildren()] 

此生成包含在列表中的“所有元素(x)的列表标题“,满足条件(对于x.findChildren()返回True)

1

它被称为理解表达式。它只是构建了x列表中所有标题的列表,当调用findChildren函数时,它将返回true。最后的声明将最后一个从列表中删除。

+1

我只知道它被称为list comprehension:http://docs.python.org/tutorial/datastructures.html#list-comprehensions。我从来没有听说过它称之为“表达”。你从哪种语言中选择了这种用法? – 2010-09-03 00:06:40

+0

gah,我的意思是理解和斯卡拉 – wheaties 2010-09-03 00:08:17

4

这是一个list comprehension

这几乎等同于:

def f(): 
    items = [] 
    for x in titles: 
     if x.findChildren(): 
      items.append(x) 
    return items[:-1] 
titles = f() 

一个Python中我最喜欢的功能:)

+0

建议添加一个链接到python文档:http://docs.python.org/tutorial/datastructures.html#list-comprehensions – 2010-09-03 00:05:14

2

表达f(X) for X in Y if EXPlist comprehension它会给你要么发电机(如果是内部())或列表(如果它在[]之内),其包含Y的每个元素的评估f(X)的结果,仅当EXP对于该X为真。

在你的情况下,如果元素有一些子元素,它将返回一个包含titles中每个元素的列表。

结尾[:-1]表示除了最后一个元素之外的所有内容。