2010-09-02 6 views
2

Je suis nouveau en python, et en lisant un tutoriel BeautifulSoup, je n'ai pas compris cette expression "[x pour x dans les titres si x.findChildren()] [: - 1]" que je n'ai pas comprendre? pouvez-vous l'expliquerpython expression

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

Répondre

5

Pour commencer [: -1], cette extrait une liste qui contient tous les éléments sauf le dernier élément.

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

Le vient la première partie, qui fournit la liste de [: -1] (découpage en python)

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

Ceci génère une liste qui contient tous les éléments (X) dans la liste " titles ", qui satisfait la condition (renvoie True pour x.findChildren())

1

Cela s'appelle une expression de compréhension. Il construit simplement une liste de tous les titres de la liste x qui renvoient true lorsque la fonction findChildren leur est appelée. L'instruction finale soustrait la dernière de la liste.

+1

Je l'ai seulement connu pour s'appeler une compréhension de liste: http://docs.python.org/tutorial/datastructures.html#list-comprehensions. Je n'ai jamais entendu ça appelé "for expression" auparavant. De quelle langue avez-vous pris cette utilisation? –

+0

gah, je voulais comprendre et Scala – wheaties

4

C'est un list comprehension.

Il est à peu près équivalent à:

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

Un de mes fonctionnalités préférées en Python :)

+0

Suggérer l'ajout d'un lien vers les docs python: http://docs.python.org/tutorial/datastructures.html#list-comprehensions –

2

L'expression f(X) for X in Y if EXP est un list comprehension Il vous donnera soit un générateur (si elle est à l'intérieur ()) ou une liste (si elle est à l'intérieur []) contenant le résultat de l'évaluation f(X) pour chaque élément de Y, par seulement si EXP est vrai pour ce X.

Dans votre cas, il retournera une liste contenant tous les éléments de titles si l'élément a des enfants. La fin [:-1] signifie, tout de la liste en dehors du dernier élément.

Questions connexes