[每日一练]患某种疾病的患者,正则表达式的匹配

该题目来源于力扣:

1527. 患某种疾病的患者 - 力扣(LeetCode)

题目要求:

患者信息表: Patients

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| patient_id   | int     |
| patient_name | varchar |
| conditions   | varchar |
+--------------+---------+
在 SQL 中,patient_id (患者 ID)是该表的主键。
'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。
这个表包含医院中患者的信息。

查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1 。

按 任意顺序 返回结果表。

查询结果格式如下示例所示。

示例 1:

输入:
Patients表:
+------------+--------------+--------------+
| patient_id | patient_name | conditions   |
+------------+--------------+--------------+
| 1          | Daniel       | YFEV COUGH   |
| 2          | Alice        |              |
| 3          | Bob          | DIAB100 MYOP |
| 4          | George       | ACNE DIAB100 |
| 5          | Alain        | DIAB201      |
+------------+--------------+--------------+
输出:
+------------+--------------+--------------+
| patient_id | patient_name | conditions   |
+------------+--------------+--------------+
| 3          | Bob          | DIAB100 MYOP |
| 4          | George       | ACNE DIAB100 | 
+------------+--------------+--------------+
解释:Bob 和 George 都患有代码以 DIAB1 开头的疾病。

思路流程:

首先,题目要求condition列要求包含字符串“DBAB1”开头,我们会想到用正则表达式的^字符表达字符串的开头。但是condition列包含 多种疾病,当“DBAB1”不属于第一个疾病位置时,^字符会失效。所以我们要用 \b内容\b 形式来进行边界匹配(每个疾病之间会用空格隔开),然后使用.str.coutains()来进行匹配。

注意,在应用.str.coutains()时要添加:regex=True 用来表达传入的参数是正则表达式。

代码实现:

import pandas as pddef find_patients(patients: pd.DataFrame) -> pd.DataFrame:#\b表示字符串的边界。只能在正则表达式中使用result=r'\bDIAB1'return patients[patients['conditions'].str.contains(result,regex=True)]

思路2:

有时候我们对正则表达式不太熟悉,那么不用正则表达式也可以,不过相对麻烦,因为我们要考虑糖尿病在第一个位置或者不在第一个位置的情况。

代码实现:

import pandas as pddef find_patients(patients: pd.DataFrame) -> pd.DataFrame:return patients[patients["conditions"].str.startswith('DIAB1') | patients["conditions"].str.contains(' DIAB1',regex=False)]

拓展(关于pandas自带的执行字符串匹配和操作。):

  1. .str.endswith(suffix[, na]):类似于 .str.startswith(),但是检查字符串是否以指定的后缀结尾。

  2. .str.contains(pat[, case, flags, na, regex]):检查字符串是否包含指定的子字符串或模式。它可以通过正则表达式进行模式匹配。

  3. .str.match(pat[, case, flags, na]):检查字符串是否与指定的正则表达式模式匹配。与 .str.contains() 不同,它只匹配字符串的开头。

  4. .str.extract(pat[, flags, expand]):根据正则表达式模式从字符串中提取匹配的子字符串。可以用于从复杂的文本中提取特定模式的信息。

  5. .str.findall(pat[, flags]):查找字符串中所有与正则表达式模式匹配的子字符串,并返回它们的列表。

  6. .str.startswith()仅用于检查字符串是否以给定的前缀开头。

总结:

大部分匹配内容的时候还是建议使用正则表达式。以上的两个思路正则表达式执行的速度稍微快一点,是311ms,而非正则表达式的执行速度是323ms,而且非正则表达式的方法要把所有的情况都要考虑并且写出来,相对繁琐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZED-Mini提示“no GPU detected“错误解决

用ZEDm提示no GPU detected roslaunch zed_wapper zedm.launch的时候会提示no GPU detected 应该是nvidia GPU的问题,于是nvidia-smi检查是否正确安装,结果报错 Failed to initialize NVML: Driver/library version mismatch查了一些博客 解决Failed …

年中企业业绩管理新篇章:用友BIP收入云助力高效管理!

随着市场竞争的加剧,年中时刻对于企业而言,不仅是评估上半年业绩的节点,更是调整策略、确保全年目标达成的关键时期。高效的业绩管理不仅需要明确的目标设定和计划制定,更需要借助先进的信息技术工具来提升管理效率和决策质量。在…

Java项目:98 springboot在线教育系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统共有管理员、用户等角色 本在线教育系统管理员功能有个人中心,用户管理,讲师管理,普通管理员管理&#xff…

Qt开发技术:Q3D图表开发笔记(四):Q3DSurface三维曲面图颜色样式详解、Demo以及代码详解

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139424086 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子网络科技博…

334.递增的三元子序列

给你一个整数数组 nums &#xff0c;判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k &#xff0c;使得 nums[i] < nums[j] < nums[k]&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

Linux云计算架构师涨薪班课程内容包含哪些?

第一阶段&#xff1a;Linux云计算运维初级工程师 目标 云计算工程师&#xff0c;Linux运维工程师都必须掌握Linux的基本功&#xff0c;这是一切的根本&#xff0c;必须全部掌握&#xff0c;非常重要&#xff0c;有了这些基础&#xff0c;学习上层业务和云计算等都非常快&#x…

java异常习题

1.有关下述Java代码描述正确的选项是 public class TestClass {private static void testMethod(){System.out.println("testMethod");}public static void main(String[] args) {((TestClass)null).testMethod();}} A.编译不通过 B.编译通过&#xff0c;运行异常…

深入解析Java多线程:源码级别的分析与实践

Java的多线程机制是其并发编程的核心&#xff0c;对于高性能和高并发应用的开发至关重要。 一、Java多线程的基础 1.1 创建线程的几种方式 在Java中&#xff0c;有几种创建线程的方式&#xff1a; 继承Thread类&#xff1a; class MyThread extends Thread {public void run…

LangChain框架介绍

LangChain 的核心组件 模型 I/O 封装 LLMs&#xff1a;大语言模型Chat Models&#xff1a;一般基于 LLMs&#xff0c;但按对话结构重新封装PromptTemple&#xff1a;提示词模板OutputParser&#xff1a;解析输出 数据连接封装 Document Loaders&#xff1a;各种格式文件的加载…

指纹考勤系统

目录 1.课题研究目的和内容 1.1 课题研究目的 1.2 课题研究内容 2.系统总体方案设计及功能模块介绍 2.1总体方案设计 2.2 ATK-301模块介绍 2.3 TFTLCD显示功能模块介绍 2.4 蜂鸣器报警功能模块介绍 2.5 时钟模块介绍 3.系统硬件设计与实现 3.1 系统硬件电…

控制应优先

先从大体上的去找规律&#xff0c;然后才是数字归纳&#xff08;更为详细的&#xff09;&#xff0c;同时控制关系应该优先&#xff08;这里是天数和位置&#xff09;。是否涉及所有对象不是广泛&#xff0c;如果是具体的数值就不是广泛。

指针的认识(传值调用和传地址调用)

学习指针的目的是使用指针解决问题&#xff0c;那什么问题&#xff0c;非指针不可呢&#xff1f; 当要求写个函数来交换两个变量的值时&#xff0c;我们稍加思索&#xff0c;可以写成如下函数&#xff1a; void Swap1(int x, int y) {int tmp x;x y;y tmp; } 那么我们来进…

Linux学习笔记8

介绍man命令 在Linux中&#xff0c;man命令用于查看系统手册页&#xff08;manual pages&#xff09;。系统手册页是关于各种Linux命令、函数库以及系统调用的详尽文档&#xff0c;能够提供关于命令的使用方法、参数说明、示例以及其他相关信息 可以利用man xxx的命令去查找某…

QT之动态加载树节点(QTreeWidget)

之前写过一篇动态加载ComboBox&#xff0c;可参见下面这篇文章 QT之动态加载下拉框&#xff08;QComboBox&#xff09; 同理QTreeWidget也可以实现动态加载&#xff0c;在一些异步加载数据&#xff0c;并且数据加载比较耗时&#xff0c;非常实用。 效果 原理分析 要实现此类效…

docker镜像转移,mac Linux

起因是镜像在互联网&#xff0c;而公司内网没有网络&#xff0c;需要跨平台转移&#xff0c;且系统不一样&#xff0c;一个Arm,一个linux。正常进行后&#xff0c;报错系统编译问题&#xff0c;特将处理过程总结一下 在 mac在pull镜像的时候需要设置参数&#xff0c;确保下载的…

数字展示具有广阔发展空间 市场规模保持增长态势

数字展示具有广阔发展空间 市场规模保持增长态势 数字展示是指以数字图像为核心&#xff0c;将触摸屏、红外线感应器、三维数字图像等相结合的高层次展示行业。与传统展示方式相比&#xff0c;数字展示能够突破时间、空间及形态的局限&#xff0c;将文字、图像等各种信息转化为…

Qwen 微调LoRA之后合并模型,使用 webui 测试

Qwen 微调LoRA之后合并模型 qwen_lora_merge.py &#xff1a; import os from peft import AutoPeftModelForCausalLM from transformers import AutoTokenizerdef save_model_and_tokenizer(path_to_adapter, new_model_directory):"""加载模型&#xff0c;合…

vue 封装水球图

1、 安装 echarts 与 echarts-liquidfill pnpm i echarts pnpm i echarts-liquidfill 2、组件中引入 import * as echarts from echarts import echarts-liquidfill 3、封装通用组件 <div class"waterball-chart"><div ref"chartContainer" s…

天线对信号传输的效率影响

天线设计和选择的标准主要包括带宽、极化、方向性、物理空间和增益等方面。这些标准直接影响信号传输的效率和质量。 带宽是指特定信号的频率范围&#xff0c;它决定了天线能够覆盖的频率范围&#xff0c;从而影响信号的传输效率。极化是指天线辐射的电场方向&#xff0c;不同的…

使用 Vue 3 和 qrcode.js 开发二维码显示组件

二维码在现代应用中广泛使用&#xff0c;例如支付、身份验证、链接分享等。本文将介绍如何使用 Vue 3 和 qrcode.js 库来创建一个灵活的二维码显示组件&#xff0c;并展示如何在应用中使用它。 1. 安装必要的依赖 首先&#xff0c;我们需要安装 Vue 3 和 qrcode.js。如果你还…