Kaggle Python练习:字符串和字典(Exercise: Strings and Dictionaries)
文章目录
- 问题:搜索特定单词并定位
- 思路
- 代码实现
- 官方代码
- 代码解析
- 更进一步
问题:搜索特定单词并定位
一位研究人员收集了数千篇新闻文章。但她想将注意力集中在包含特定单词的文章上。完成以下功能以帮助她过滤文章列表。
您的函数应满足以下条件:
不要包含关键字字符串仅作为较大单词的一部分出现的文档。例如,如果她正在查找关键字“close”,则您不会包含字符串“enlined”。
她不希望你区分大小写字母。所以这句话“结案了”。当关键字“关闭”时将被包含
不要让句号或逗号影响匹配的内容。 “已经关门了。”当关键字为“close”时将被包含。但您可以假设没有其他类型的标点符号
思路
- 读取列表中的字符串并转为小写
- 去除两边的干扰符号",.?",使用
strip()函数 - 将中间的逗号替换为空格使用
split()函数划分为单词 - 然后将划分出的单词与keyword进行比对,如果在则在空列表中保存索引
- 返回结果列表
# doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"]
doc_list=['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?']
keyword = 'Casino'
list = []
l = len(doc_list)
for i in range(l):words = doc_list[i].lower()print(words)words = words.strip('.,?')print(words)wordlist = words.replace(",","").split()print(wordlist)for word in wordlist:if word == keyword.lower():list.append(i)print(i)
# if keyword in wordlist:
# print(i)
print(list)

代码实现
def word_search(doc_list, keyword):"""Takes a list of documents (each document is a string) and a keyword. Returns list of the index values into the original list for all documents containing the keyword.Example:doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"]>>> word_search(doc_list, 'casino')>>> [0]"""list = []l = len(doc_list)for i in range(l):words = doc_list[i].lower()words = words.strip(',.?')wordlist = words.replace(",","").split()for word in wordlist:if word == keyword:list.append(i)breakreturn list
官方代码
def word_search(doc_list, keyword):# list to hold the indices of matching documentsindices = [] # Iterate through the indices (i) and elements (doc) of documentsfor i, doc in enumerate(doc_list):# Split the string doc into a list of words (according to whitespace)tokens = doc.split()# Make a transformed list where we 'normalize' each word to facilitate matching.# Periods and commas are removed from the end of each word, and it's set to all lowercase.normalized = [token.rstrip('.,').lower() for token in tokens]# Is there a match? If so, update the list of matching indices.if keyword.lower() in normalized:indices.append(i)return indices
代码解析
enumerate() 是 Python 的一个内置函数,用于为可迭代对象(如列表、元组或字符串)提供一个自动计数器,同时遍历该对象。它返回一个包含索引和值的迭代器,常用于 for 循环中。
enumerate(iterable, start=0)
- iterable: 任何可以遍历的对象,如列表、字符串等。
- start(可选): 计数的起始值,默认为 0,也可以指定其他起始值。
- enumerate() 返回一个迭代器对象,每次迭代返回一个元组,包含当前元素的索引和元素值。
- 向字典中添加键值对(元素对)
dictionary[key] = value
- key:表示字典的键。
- value:表示该键对应的值。
- str.split() 方法用于根据指定的分隔符将字符串拆分为子字符串列表。默认情况下,分隔符是任意的空白字符(空格、制表符或换行符)
string.split(separator, maxsplit)
- separator(可选): 指定的分隔符字符串。如果没有提供,字符串会按空白字符进行拆分。
- maxsplit(可选): 指定最大拆分次数。默认值是 -1,表示不限制拆分次数。
- str.rstrip() 是 Python 中的一个字符串方法,用于删除字符串末尾的指定字符(默认为空白字符)。
string.rstrip([chars])
- chars(可选): 指定要移除的字符序列。如果没有提供,默认会移除末尾的所有空白字符(包括空格、换行符、制表符等)。
- str.strip() 是 Python 中用于删除字符串两端(开头和结尾)指定字符(默认为空白字符)的一个方法。它可以同时移除字符串开头和末尾的字符。
string.strip([chars])
- chars(可选): 指定要移除的字符序列。如果没有提供,默认会移除两端的所有空白字符(如空格、换行符、制表符等)。
- result = text.strip(“,。?”) # 删除两端的 ‘,’、‘。’、‘?’
更进一步
现在研究人员想要提供多个关键字进行搜索。完成下面的函数来帮助她。
(我们鼓励您在实现此函数时使用刚刚编写的word_search函数。以这种方式重用代码可以使您的程序更加健壮和可读 - 并且可以节省打字!)
1、在里面改写函数,使用循环对多个keywords进行判断
def multi_word_search(doc_list, keywords):"""Takes list of documents (each document is a string) and a list of keywords. Returns a dictionary where each key is a keyword, and the value is a list of indices(from doc_list) of the documents containing that keyword>>> doc_list = ["The Learn Python Challenge Casino.", "They bought a car and a casino", "Casinoville"]>>> keywords = ['casino', 'they']>>> multi_word_search(doc_list, keywords){'casino': [0, 1], 'they': [1]}"""# list to hold the indices of matching documents
# indices = []dictionary = {}for keyword in keywords:indices = []# Iterate through the indices (i) and elements (doc) of documentsfor i, doc in enumerate(doc_list):# Split the string doc into a list of words (according to whitespace)tokens = doc.split()# Make a transformed list where we 'normalize' each word to facilitate matching.# Periods and commas are removed from the end of each word, and it's set to all lowercase.normalized = [token.rstrip('.,').lower() for token in tokens]# Is there a match? If so, update the list of matching indices.if keyword.lower() in normalized:indices.append(i)dictionary[keyword] = indicesreturn dictionary# Check your answer
q3.check()
2、直接调用前面已经实现的函数word_search(doc_list, keyword)
def multi_word_search(doc_list, keywords):"""Takes list of documents (each document is a string) and a list of keywords. Returns a dictionary where each key is a keyword, and the value is a list of indices(from doc_list) of the documents containing that keyword>>> doc_list = ["The Learn Python Challenge Casino.", "They bought a car and a casino", "Casinoville"]>>> keywords = ['casino', 'they']>>> multi_word_search(doc_list, keywords){'casino': [0, 1], 'they': [1]}"""keyword_to_indices = {}for keyword in keywords:keyword_to_indices[keyword] = word_search(doc_list, keyword)return keyword_to_indices
相关文章:
Kaggle Python练习:字符串和字典(Exercise: Strings and Dictionaries)
文章目录 问题:搜索特定单词并定位思路代码实现官方代码代码解析 更进一步 问题:搜索特定单词并定位 一位研究人员收集了数千篇新闻文章。但她想将注意力集中在包含特定单词的文章上。完成以下功能以帮助她过滤文章列表。 您的函数应满足以下条件&…...
React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件
文章目录 一、全局事件总线二、setState的原理1. 为什么要使用setState修改数据2. setState的三种用法(1) 基本使用(2) 传入回调函数(3) setState是一个异步调用 3. setState为什么要设置成异步 二、PureComponent优化性能1. React的diff算法以及Key的优化(扩展)(1) diff算法(2…...
Java学习-JVM
目录 1. 基本常识 1.1 JVM是什么 1.2 JVM架构图 1.3 Java技术体系 1.4 Java与JVM的关系 2. 类加载系统 2.1 类加载器种类 2.2 执行顺序 2.3 类加载四个时机 2.4 生命周期 2.5 类加载途径 2.6 双亲委派模型 3. 运行时数据区 3.1 运行时数据区构成 3.2 堆 3.3 栈…...
leed认证分几个级别
LEED(Leadership in Energy and Environmental Design)认证是一个评估建筑项目可持续性的严格框架,其级别主要分为以下四个: LEED认证(Certified):这是最低级别的认证,要求建筑项目…...
3.C++经典实例-计算一个数的阶乘
阶乘(factorial)是基斯顿卡曼于1808年发明的运算符号,用于表示一个正整数n的所有小于及等于该数的正整数的积。自然数n的阶乘写作n!。例如,5的阶乘表示为5! 1 2 3 4 5 120。 阶乘在数学和计算机科学中有广泛的应用。例如…...
深入理解Qt中的QTableView、Model与Delegate机制
文章目录 显示效果QTableViewModel(模型)Delegate(委托)ITEM控件主函数调用项目下载在Qt中,视图(View)、模型(Model)和委托(Delegate)机制是一种非常强大的架构,它们实现了MVC(模型-视图-控制器)设计模式。这种架构分离了数据存储(模型)、数据展示(视图)和数据操作(委托),使…...
解读《ARM Cortex-M3 与Cortex-M4 权威指南》——第1章 ARM Cortex-M处理器简介
1. 三级流水线设计 解释:三级流水线设计意味着处理器在执行指令时可以同时处理多个步骤。这些步骤通常包括取指(Fetch)、译码(Decode)和执行(Execute)。好处:这种设计提高了指令的执行效率,使得处理器能够在每个时钟周期内完成更多的工作,从而提升整体性能。2. 哈佛总…...
java集合类的框架体系
1.集合的好处 相比数组,他可以存储多种类型的元素,并且可以动态新增; 2. 集合分类 3.Collection接口 3.1常用方法 3.2迭代器-遍历 collection接口继承了Interable接口,collection的子类可以使用迭代器; 注意事项…...
基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现
详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而…...
什么是模糊测试?
近年来,随着信息技术的发展,各种新型自动化测试技术如雨后春笋般出现。其中,模糊测试(fuzz testing)技术开始受到行业关注,它尤其适用于发现未知的、隐蔽性较强的底层缺陷。这里,我们将结合AFL开…...
3.C++经典实例-奇数还是偶数
要判断一个数是奇数还是偶数,只需要判断这个数是否能被2整除即可,如果要判断是否能整除,则要判断当前数除以2的余数是否为0,在C中,余数,使用%号,因此,程序为: #include …...
真牛啊!全球人工智能标准教科书,斯坦福、麻省理工、加州大学等十多所顶尖机构为它点赞!!
这本《人工智能:计算代理基础》堪称全球人工智能标准教科书!它因其前沿的技术融合、丰富的实践案例以及理论深度与实践并重的特点而成为人工智能领域的热门书籍。 该书已经赢得了斯坦福大学、佐治亚理工学院、谷歌大脑、麻省理工学院、加州大学、微软研究…...
Android——通过MediaStore查询图片
查询图片: private void loadImageList() {String[] columns new String[]{MediaStore.Images.Media._ID, // 编号MediaStore.Images.Media.TITLE, // 标题MediaStore.Images.Media.SIZE, // 文件大小MediaStore.Images.Media.DATA, // 文件路径};Cursor cursor g…...
手写Spring IOC-简易版
目录 项目结构entitydaoIUserDaoUserDaoImpl serviceIUserServiceUserServiceImpl ApplicationContext 配置文件初始化 IOC 容器RunApplication 注解初始化 IOC 容器BeanAutowired Reference 项目结构 entity User Data NoArgsConstructor AllArgsConstructor Accessors(chai…...
【算法题】62. 不同路径(LeetCode)
【算法题】62. 不同路径(LeetCode) 1.题目 下方是力扣官方题目的地址 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图…...
【VUE】Vue中的data属性为什么是一个函数而不是一个对象
在 Vue.js 中,组件的 data 属性可以是一个对象或者一个函数但通常建议将其设置为函数。这是因为组件可能会被多次使用,如果 data 是一个普通对象,那么该对象会被所有实例共享,导致数据混乱。将 data 设置为一个函数可以保证每个组…...
ddos攻击介绍和排查方法
一、DDoS攻击介绍 DDoS攻击,全称为分布式拒绝服务攻击(Distributed Denial of Service Attack),是一种常见的网络攻击手段。它通过利用多个计算机系统向目标服务器、服务或网络发送大量请求,导致目标无法处理正常流量…...
git clone --single-branch 提升效率
git clone --single-branch 是一个Git命令,用于从远程仓库中仅克隆单个分支到本地仓库。这个命令在软件开发中非常有用,尤其是在需要特定分支的代码而无需整个仓库的情况下。 基本用法 git clone --single-branch 命令的基本语法如下: git…...
代码随想录算法训练营第十天|1. 两数之和,第454题.四数相加II
文档讲解:代码随想录 难度:一般嗷~~ 1. 两数之和 力扣题目链接(opens new window) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对…...
龙迅LT8911EX LVDS转EDP 点屏,大批量出货产品
龙迅LT8911EX描述: Lontium LT8911EX是LVDS到eDP转换器,具有单端口或双端口可配置的LVDS接收器,有1个时钟通道和最多8个数据通道,每个数据通道最大运行1.2Gbps,最大输入带宽为9.6Gbps。转换器将输入LVDS数据去序列化&…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
