python - 无法使用 python 过滤器返回预期的输出
问题描述
我正在研究网络抓取。我得到了标题列表,现在我正在过滤掉不需要的东西。但是在过滤时我没有得到预期的输出。我无法在我的代码中找到错误。
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']
解决方案
对于解析'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']
推荐阅读
- javascript - React Native 在 useLayoutEffect 中找不到变量 Navigation
- rust - Rust:拆分字符串以获取单词及其位置
- ruby-on-rails - Rails 和条件 STI 路由
- c++ - 将 ShellExecute return (HINSTANCE) 转换为 int 时避免 MSVC 警告
- node.js - 使用 nodejs、ejs 和 axios 从不同来源填充 DataTable
- python - 如何使用python填写网络表单
- c - 为什么我找不到 ioctl() 的文档?
- setuptools - 是否有理由在 python 项目中同时拥有 tox.ini 和 setup.cfg ?
- swift - 如何使一个像集合一样的视图与单元格独立对齐?
- mysql - SQL查询的简化