выражение Python - PullRequest
       9

выражение Python

2 голосов
/ 03 сентября 2010

Я новичок в python, и, читая учебник BeautifulSoup, я не понял выражения "[x для x в заголовках, если x.findChildren ()] [: - 1]", которое я не понял? Вы можете объяснить это

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

Ответы [ 4 ]

5 голосов
/ 03 сентября 2010

Для начала [: -1], это извлекает список, который содержит все элементы, кроме последнего элемента.

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

Приходит первая часть, которая поставляет список в [: -1] (нарезка на python)

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

Генерирует список, содержащий все элементы (x) в списке «заголовков», который удовлетворяет условию (возвращает True для x.findChildren ())

4 голосов

Это список понимания .

Это в значительной степени эквивалентно:

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

Одна из моих любимых функций в Python:)

2 голосов
/ 03 сентября 2010

Выражение f(X) for X in Y if EXP представляет собой понимание списка Оно даст вам либо генератор (если он внутри ()), либо список (если он внутри []), содержащий результат оценки f(X) для каждого элемента Y, только если EXP истинно для этого X.

В вашем случае он вернет список, содержащий каждый элемент из titles, если элемент имеет некоторыеchildren.

Окончание [:-1] означает, что все в списке, кроме последнего элемента.

1 голос
/ 03 сентября 2010

Это называется выражением понимания. Это просто создание списка всех заголовков в списке x, которые возвращают true, когда к ним вызывается функция findChildren. Последний оператор вычитает последний из списка.

...