2010-09-02 34 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]表示除了最後一個元素之外的所有內容。