Пересоздать
Знаете, мне действительно не нравится мой ответ. Я проголосовал за другой ответ, но мне понравился его первоначальный ответ, потому что он был не только чистым, но и не требующим пояснений, и я стал жертвой:
for row in doc.cssselect('tr'):
for cell in row.cssselect('td'):
if(cel.text_content() != ''):
#do stuff here
элегантного решения не намного больше.
Original-иш :
Вы можете преобразовать второй цикл for
следующим образом:
[cell for cell in row.cssselect if cell.text_content() != '']
и превратить его в список-понимание. Таким образом, у вас есть предварительно проверенный список. Вы можете сделать это еще дальше, посмотрев на следующий пример:
a = [[1,2],[2,3],[3,4]
newList = [y for x in a for y in x]
, что превращает его в [1, 2, 2, 3, 3, 4]
. Затем вы можете добавить в конце оператор if
для вывода значений. Следовательно, вы бы сократили это в одну строку.
Опять же, если вы посмотрите на itertools :
ifilter(lambda x: x.text_content() != '', row.cssselect('td'))
создает итератор, который вы можете перебирать, пропуская все ненужные элементы.
Редактировать
И прежде чем я получу больше отрицательных голосов, если вы используете Python 3.0, filter
работает так же. Нет необходимости импортировать ifilter
.