无法使用python过滤器返回预期的输出

时间:2019-03-31 06:01:45

标签: python python-3.x

我正在研究网页抓取。我有标题列表,现在我正在过滤掉不需要的东西。但是在过滤时我没有得到预期的输出。我找不到我的代码中的错误。

import re
  def filter_header(item):
    if(item):
      if(item == 'Rank & Title'):
        rank_title_split = re.split('[&]', item)
        print(rank_title_split) # getting  ['Rank','Title']
        return rank_title_split
    else:
        print(item) 
        return item


 imdb_header_list = [False, 'Rank & Title', 'IMDb Rating', 'Your Rating',   False]
 imdb_filtered_header_list =  filter(filter_header,imdb_header_list)
 print(list(imdb_filtered_header_list))

获取输出=

['Rank & Title', 'IMDb Rating', 'Your Rating']

我的预期输出=

[['Rank','Title'],'IMDb Rating', 'Your Rating']

2 个答案:

答案 0 :(得分:2)

对于解析'Rank & Title',不需要过滤器。您可以将filter_header应用于列表中的每个项目:

imdb_filtered_header_list =  [filter_header(item) for item in imdb_header_list]

然后您可以过滤出False值。

有效的实现方式:

import re
def filter_header(item):
    if(item == 'Rank & Title'):
        rank_title_split = re.split('[&]', item)
        return rank_title_split
    return item


imdb_header_list = [False, 'Rank & Title', 'IMDb Rating', 'Your Rating',   False]
imdb_filtered_header_list =  [filter_header(item) for item in imdb_header_list]
imdb_filtered_header_list = list(filter(bool, imdb_filtered_header_list))  # remove False values
print(imdb_filtered_header_list)

输出:

[['Rank ', ' Title'], 'IMDb Rating', 'Your Rating']

答案 1 :(得分:1)

过滤器功能定义说

The filter() function returns an iterator were the items are filtered through a function to test if the item is accepted or not.

您要寻找的是迭代器而不是过滤器