字符串展开(Python)

展开字符串中用-压缩的连续小写字母或者数字,不是压缩形式的-不用理会,-没有压缩字符的去除-。


(笔记模板由python脚本于2024年01月21日 18:18:19创建,本篇笔记适合熟悉 p y t h o n python python字符串和列表的coder翻阅)


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


展开-压缩的连续字符
字 符 串 展 开
(只展开压缩,中间没有字符去除-)


本文质量分:

97 97 97

本文地址: https://blog.csdn.net/m0_57158496/article/details/135732917

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ 字符串展开
    • 1、题目描述
    • 2、算法解析
      • 2.1 输入非法拦截
      • 2.2 生成填补展开字符串
      • 2.3 拆分子串
      • 2.4 遍历子串
    • 3、完整源码(Python)


◆ 字符串展开


1、题目描述


  • 题目描述截屏图片
    在这里插入图片描述题目来源于 CSDN 问答社区提问“字符串的展开”

  • 题 主 题主 的解题思路

    1、考虑"两端的字符是否同为小写字母或同为数字,并且右端的ASCII码大于左端;

    2、考虑p1是否为3;

    3、考虑p1和p3的具体取值。

题主的代码


def fillstr(string, p1, p2, p3):s = [i for i in string]for i in range(len(s)):if s[i] == '-' and ord(s[i - 1]) < ord(s[i + 1]):if (s[i - 1].isdigit() and s[i + 1].isdigit()) or (s[i - 1].isalpha() and s[i + 1].isalpha()):if p1 != 3:s[i] = [p2 * chr(x) for x in range(ord(s[i - 1]) + 1, ord(s[i + 1]))]elif p1 == 3:s[i] = [p2 * (ord(s[i + 1]) - ord(s[i - 1]) - 1) * '*']finalstr = []    #在执行下面的函数之前,s里应该被替换的 ‘-’ 都以子列表的形式存储,所以下面的条件语句都只考虑子列表for i in s:if isinstance(i, list) and p1 == 2:i = [j.upper() for j in i]if isinstance(i, list) and p3 == 1:finalstr.extend(i)elif isinstance(i, list) and p3 == 2:finalstr.extend(i[::-1])else:finalstr.append(i)return ''.join(finalstr)
para_list = [int(i) for i in input().split()]
String = input()
print(fillstr(String, para_list[0], para_list[1], para_list[2]))

  题主说代码运行超时而没有通过,而在没有时间限制的网站却顺利通过。这说明代码和算法都没毛病,只是应该都可以优化。我看到题主用了python中不太高效的列表,且全遍历输入字符串,这两者可能都费了点时间。
  (对题主的代码我没作实境调试,仅仅纯纯的 C V CV CV)



回页目录


2、算法解析


  • 我的审题

    参数说明
    p1 (1.填充小写字母;2.填充大写字母;3.填充*号。数字在1、2情况都填充数字。)
    p2 (填充字符重复个数)
    p3 (1.正序;2.逆序)

    填充规则
    - 号两端是相邻的大 - 小字符,去除 - 号;前大后小,保持原状。(我认为,据题意如有p1不在1~3的范围或者p2不是1、2时,是非法输入,应该是返回 N o n e None None。)

  • 解析

      可以从数据结构和“算法”上来稍微 缩 减 缩减 代码运行所耗时间。

    1、首先剔除不用展开的情形,省点time;

    2、用str.split(’-’)拆分字符串,减少遍历次数,仅仅处理紧邻 - 的两个字符,只遍历 s t r . c o u n t str.count str.count(’-’)-1次,大大缩减遍历次数而节省时间。我用 * 收集p1、p2、p3三个参数为一个列表p,感觉“紧凑”一些。

  • 代码运行效果截屏图片
    在这里插入图片描述

2.1 输入非法拦截


  • 代码解析

      当参数p1不在( 1 、 2 、 3 1、2、3 123)或者p3不在( 1 、 2 1、2 12)是,报错后返回 N o n e None None

  • 代码运行效果截屏图片
    在这里插入图片描述
    在这里插入图片描述

Python代码

if p[0] not in (1, 2, 3) or p[-1] not in (1, 2):print(f"\n{' p参数错误!':~^35}")returnelif '-' not in s:print(f"\n{' 字符串格式错误!':~^32}")return



回页目录


2.2 生成填补展开字符串


  • 代码解析

      为了减少缩进层次,也为方便代码复用,我把生成填补展开字符串的部分代码封装成 c h a r char char函数,以区间字符的 A S C I I ASCII ASCII码为参数依据p参数的三个值生成相应的“填补展开字符串”。

Python代码


def char(a, b, p):''' 生成连续字符串 '''a += 1if p[0] == 3:chars = ''.join(['*'*p[1] for i in range(a, b)])else:chars = ''.join([chr(i)*p[1] for i in range(a, b)])if p[-1] == 2:return chars[::-1]return chars



回页目录


2.3 拆分子串


  • 代码解析

      把输入字符串以 s t r . s p l i t str.split str.split(’- ') 拆分成子串。

Python代码

#用str.split('-')拆分字符串,减少遍历次数。s = s.split('-')



回页目录


2.4 遍历子串


  • 代码解析

      设返回变量 r e s u l t result result值为第一个子串, f o r for for循环遍历从第二个子串开始,比对判定 r e s u l t result result尾和遍历当前子串首中间的填充字符串,将当前子串与原有 r e s u l t result result拼接后重新赋值给 r e s u l t result result,循环往复,直到最后一个子串。最后的 r e s u l t result result变量就是我们的最后字符串,用 r e t u r n return return返回即成。

Python代码

result = s[0]for i in range(1, len(s)): # 遍历到倒数第二组子字符串。a = result[-1] # -前字符。b = s[i][0] # -后字符a2, b2 = ord(a), ord(b) # a、b的ASCII码。if a.isdigit() and b.isdigit() and b > a:chars = '' if b2-a2==1 else char(a2, b2, p)elif a.islower() and b.lower() and b > a: # 小写字母可以直接比较大小,实则是比较ASCII编码。chars = '' if b2-a2==1 else char(a2, b2, p)else:chars = '-'result = ''.join([result, chars, s[i]])return result



回页目录


3、完整源码(Python)

(源码较长,点此跳过源码)

#!/sur/bin/nve python
# coding: utf-8def fillRange(s, *p): # 用*号收集p1、p2、p3。# 首先剔除不用展开的情形,省点time。if p[0] not in (1, 2, 3) or p[-1] not in (1, 2):print(f"\n{' p参数错误!':~^35}")returnelif '-' not in s:print(f"\n{' 字符串格式错误!':~^32}")return#用str.split('-')拆分字符串,减少遍历次数。s = s.split('-')result = s[0]for i in range(1, len(s)): # 遍历到倒数第二组子字符串。a = result[-1] # -前字符。b = s[i][0] # -后字符a2, b2 = ord(a), ord(b) # a、b的ASCII码。if a.isdigit() and b.isdigit() and b > a:chars = '' if b2-a2==1 else char(a2, b2, p)elif a.islower() and b.lower() and b > a: # 小写字母可以直接比较大小,实则是比较ASCII编码。chars = '' if b2-a2==1 else char(a2, b2, p)else:chars = '-'result = ''.join([result, chars, s[i]])return resultdef char(a, b, p):''' 生成连续字符串 '''a += 1if p[0] == 3:chars = ''.join(['*'*p[1] for i in range(a, b)])else:chars = ''.join([chr(i)*p[1] for i in range(a, b)])if p[-1] == 2:return chars[::-1]return charsif __name__ == '__main__':s = input(f"\n输入字符串:").strip()while 1:p = list(map(int, input(f"输入字p参数(如1 2 1):").strip().split()))if len(p)==3:break print(f"{' 重新输入!':~^35}\n")print(f"\n输出:{fillRange(s, *p)}")



回页首


上一篇:  成绩等级分数区间查询(根据有效分数序列及等级差值,计算并打印等级相应分数区间)
下一篇: 



我的HOT博:

  本次共计收集289篇博文笔记信息,总阅读量44.72w。数据采集于2023年12月11日 23:07:13,用时5分11.8秒。阅读量不小于4.0k的有17篇。

  1. ChatGPT国内镜像站初体验:聊天、Python代码生成等
    地址:https://blog.csdn.net/m0_57158496/article/details/129035387
    浏览阅读:6.2w
    点赞:127 收藏:809 评论:71
    (本篇笔记于2023-02-14 23:46:33首次发布,最后修改于2023-07-03 05:50:55)

  2. 让QQ群昵称色变的神奇代码
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    浏览阅读:5.8w
    点赞:24 收藏:86 评论:17
    (本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)

  3. Python列表(list)反序(降序)的7种实现方式
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    浏览阅读:9.9k
    点赞:5 收藏:30 评论:8
    (本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)

  4. pandas 数据类型之 DataFrame
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    浏览阅读:9.4k
    点赞:7 收藏:34 
    摘要:pandas 数据类型之 DataFrame_panda dataframe。
    (本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)

  5. 个人信息提取(字符串)
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    浏览阅读:7.7k
    摘要:个人信息提取(字符串)_python个人信息提取。
    (本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)

  6. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:7.2k
    评论:1
  7. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:7.2k
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)

  8. 斐波那契数列的递归实现和for实现
    地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    浏览阅读:5.6k
    点赞:4 收藏:2 评论:8
  9. 回车符、换行符和回车换行符
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    浏览阅读:5.5k
    点赞:2 收藏:3 
    摘要:回车符、换行符和回车换行符_命令行回车符。
    (本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)

  10. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:5.3k
  11. 练习:字符串统计(坑:f‘string‘报错)
    地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    浏览阅读:5.1k
  12. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    浏览阅读:5.1k
    点赞:14 收藏:44 
  13. 我的 Python.color() (Python 色彩打印控制)
    地址:https://blog.csdn.net/m0_57158496/article/details/123194259
    浏览阅读:4.6k
    点赞:2 收藏:8 
    摘要:我的 Python.color() (Python 色彩打印控制)_python color。
    (本篇笔记于2022-02-28 22:46:21首次发布,最后修改于2022-03-03 10:30:03)

  14. 练习:生成100个随机正整数
    地址:https://blog.csdn.net/m0_57158496/article/details/122558220
    浏览阅读:4.6k
    (本篇笔记于2022-01-18 13:31:36首次发布,最后修改于2022-01-20 07:58:12)

  15. 密码强度检测器
    地址:https://blog.csdn.net/m0_57158496/article/details/121739694
    浏览阅读:4.4k
    (本篇笔记于2021-12-06 09:08:25首次发布,最后修改于2022-11-27 09:39:39)

  16. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    浏览阅读:4.2k
    (本篇笔记于2022-01-20 19:38:12首次发布,最后修改于2022-01-21 18:32:02)

  17. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
    地址:https://blog.csdn.net/m0_57158496/article/details/124424935
    浏览阅读:4.0k
    摘要:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)_生日模拟问题,计算频率,并画出随着试验次数n的增大,频率和理论概率的 关系图。
    (本篇笔记于2022-04-26 12:46:25首次发布,最后修改于2022-04-27 21:22:07)

推荐条件 阅读量突破4.0k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

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

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

相关文章

机器学习算法实战案例:使用 Transformer 进行时间序列预测

自 ChatGPT 问世以来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已经引起巨大轰动&#xff0c;取得的成果令人印象深刻。LLMs 成功的关键在于它们的核心构建模块&#xff0c;即 transformers。 在本文中&#xff0c;我们将提供一个在 PyTorch 中使用它们的完整指南…

Istio

三. Istio 官网 Github Connect 连接&#xff1a; 服务发现、负载均衡、重试、路由、故障注入、重定向、A/B测试、金丝雀发布Secure 安全方面&#xff1a; 认证、通道加密、访问授权Control 控制&#xff1a; 访问控制、限速、配额管理、服务计费Observe 观察&#xff1a; 链…

AI相关资料

文心一格收费,有免费额度 通义万相_AI创意作画_AI绘画_人工智能-阿里云 AI AIchatOS 即时 AI - 生成式图像创作及 UI 设计工具 Framer — The internet is your canvas

Vuex的基础使用

在使用之前要先了解Vuex的组成结构&#xff0c;跟对应的使用关系。 在上图的结构图中可以看到四个组成部分&#xff0c;首先是Components&#xff08;组件&#xff09;、Actions&#xff08;行动&#xff09;、Mutations&#xff08;变化&#xff09;、state&#xff08;状态/数…

2023.1.21 关于 Redis 主从复制详解

目录 引言 单点问题 分布式系统 主从模式 配置 Redis 主从结构 断开主从关系 切换主从关系 补充知识点一 只读 网络延迟 拓扑结构 一主一从 一主多从 树形主从结构 主从复制的基本流程 数据同步 replicationid offset pzync 运行流程 具体流程 补充知识点二…

GNU Radio简介及流程图搭建

文章目录 前言一、GNU Radio 是什么&#xff1f;二、GNU Radio 安装三、搭建第一个流程图1、创建 GRC 文件2、添加块3、运行流程图 前言 欢迎来到无线通信的世界&#xff0c;初步接触 GNU Radio&#xff0c;对其学习进行一个记录。 一、GNU Radio 是什么&#xff1f; GNU Rad…

无偿!全代码!增删改查+redis+token+mybatisplus 完整代码+讲解适合大一大二以及新手小白 Controller层讲解

这是一个简单的基础的且有不足的代码1.设置了一个管理员账号用于登录页面&#xff08;用到简单的redis和token&#xff09;2.增删改查&#xff08;批量or单个删除&#xff09;患者信息3.可更改患者身体状况4.excl表导出患者总体信息4.计算不同地区的患者情况并用前端以图标形式…

校园疫情防控信息管理系统的设计与实现-计算机毕业设计源码12057

摘 要 如今计算机行业的发展极为快速&#xff0c;搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用&#xff0c;其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来&#xff0c;防疫成了社会关注的重中…

结构体的内存对齐(计算题常考点)

许久不见我考完试回来啦&#xff0c;让我们接着将结构体进行到底&#xff01; 目录 结构体对齐的意义&#xff1a; 结构体对齐的实现&#xff1a; 对齐规则&#xff1a; 训练&#xff1a; 好到这里误区来了&#xff1a; 总结&#xff1a; 往期回顾&#xff1a; 下期预告&…

docker使用http_proxy配置代理

钢铁知识库&#xff0c;一个学习python爬虫、数据分析的知识库。人生苦短&#xff0c;快用python。 在内网服务器中&#xff0c;docker经常需要下载拉取镜像&#xff0c;但由于没有网络要么只能手动导入镜像包&#xff0c;又或者通过http_proxy代理到其它服务器下载。 解决方法…

Elasticsearch+Kibana 学习记录

文章目录 安装Elasticsearch 安装Kibana 安装 Rest风格API操作索引基本概念示例创建索引查看索引删除索引映射配置&#xff08;不配置好像也行、智能判断&#xff09;新增数据随机生成ID自定义ID 修改数据删除数据 查询基本查询查询所有&#xff08;match_all&#xff09;匹配查…

腾讯产品面试题:为什么水果店不卖蔬菜,蔬菜店却卖水果?

嗨&#xff0c;亲爱的小伙伴们&#xff01;小米又来啦~ 今天我要和大家聊一聊一个超级有趣的话题——腾讯产品面试题&#xff1a;为什么水果店不卖蔬菜&#xff0c;蔬菜店却卖水果&#xff1f;这是不是让你脑洞大开呀&#xff1f;&#xff01;不过别着急&#xff0c;小米会给你…