字符串展开(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.mzph.cn/news/639748.shtml

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

相关文章

SAP屏幕开发之Listbox下拉列表

文章目录 前言一、案例介绍二、静态下拉列表 a.绘制并设置属性 b.两种属性区别以及效果展示 三、动态下拉列表 a.绘制下拉列表 b.调用函数绑定 四、总结 前言 这篇文章给大家介绍一下SAP Dialog程序中 Listbox控件 的使用&#xf…

如何搭建MariaDB并实现无公网ip环境远程连接本地数据库

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 1. 配置MariaDB数据库1.1 安装MariaDB数据库1.2 测试局域网内远程连接 2. 内网穿透2.1 创建隧道映射…

多级缓存

一、多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; •请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时&#xff…

【Ubuntu】Ubuntu安装微信

1. 优麒麟 Wine &#xff08;“Wine Is Not an Emulator(Wine不是一个模拟器)” 的缩写&#xff09;是一个能够在多种 POSIX-compliant 操作系统&#xff08;诸如 Linux&#xff0c;Mac OSX 及 BSD 等&#xff09;上运行 Windows 应用的兼容层。银河麒麟的操作系统也是基于Ubu…

Android状态栏布局隐藏的方法

1.问题如下&#xff0c;安卓布局很不协调 2.先将ActionBar设置为NoActionBar 先打开styles.xml 3.使用工具类 /*** StatusBar 工具类*/ public class StatusBarUtil {/*** 设置状态栏全透明** param activity 需要设置的activity*/public static void setTransparent(Activit…

【大数据】流处理基础概念(一):Dataflow 编程基础、并行流处理

流处理基础概念&#xff08;一&#xff09;&#xff1a;Dataflow 编程基础、并行流处理 1.Dataflow 编程基础1.1 Dataflow 图1.2 数据并行和任务并行1.3 数据交换策略 2.并行流处理2.1 延迟与吞吐2.1.1 延迟2.1.2 吞吐2.1.3 延迟与吞吐 2.2 数据流上的操作2.2.1 数据接入和数据…

【江科大】STM32:(超级详细)定时器输出比较

文章目录 输出比较单元特点 高级定时器&#xff1a;均有4个通道 PWM简介PWM&#xff08;Pulse Width Modulation&#xff09;脉冲宽度调制输出比较通道PWM基本结构基本定时器 参数计算捕获/比较通道的输出部分详细介绍如下&#xff1a; 舵机介绍硬件电路 直流电机介绍&#xff…

LLM自回归解码

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;大型语言模型&#xff08;LLM&#xff09;如Transformer进行推理时&#xff0c;自回归解码是一种生成文本的方式。在自回归解码中&#xff0c;模型在生成下一个单词时会依赖于它之前生成的单词。 使用自回归解码的公式…

SPE-Single Pair Ethernet单对以太网测试那些事儿

SPE-Single Pair Ethernet单对以太网测试哪些事&#xff1f;SPE标准IEEE802.3再网上溯源的话是从ISO/IEC11801-X series演变而来。 IEEE802.3cg 10Base-T1 10mbt/s 15m-1000m 0.1mHz-20mHz IEEE802.3bw 100Base-T1 100mbt/s 15m 0.3mHz-66mHz IEEE802.3bp 1000…

k8s-认证授权 14

Kubernetes的认证授权分为认证&#xff08;鉴定用户身份&#xff09;、授权&#xff08;操作权限许可鉴别&#xff09;、准入控制&#xff08;资源对象操作时实现更精细的许可检查&#xff09;三个阶段。 Authentication&#xff08;认证&#xff09; 认证方式现共有8种&…

Pandas.Series.describe() 统计学描述 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.1.2 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 传送门&#xff1a; Pandas API参考目录 传送门&#xff1a; Pandas 版本更新及新特性 传送门&…

Java层序遍历二叉树

二叉树准备: public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) {this.val val;}TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right right;} } 思路&#xff1a;我们需要创建一个队…

前后端分离,使用vue3整合SpringSecurity加JWT实现登录校验

前段时间写了一篇spring security的详细入门&#xff0c;但是没有联系实际。 所以这次在真实的项目中来演示一下怎样使用springsecurity来实现我们最常用的登录校验。本次演示使用现在市面上最常见的开发方式&#xff0c;前后端分离开发。前端使用vue3进行构建&#xff0c;用到…

算法每日一题: 分割数组的最大值 | 动归 | 分割数组 | 贪心+二分

Hello&#xff0c;大家好&#xff0c;我是星恒 呜呜呜&#xff0c;今天给大家带来的又是一道经典的动归难题。 题目&#xff1a;leetcode 410给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k_ 个非空的连续子数组。设计一个算法使得这 k _个子数组…

Mybatis 动态SQL(set)

我们先用XML的方式实现 : 把 id 为 13 的那一行的 username 改为 ip 创建一个接口 UserInfo2Mapper ,然后在接口中声明该方法 package com.example.mybatisdemo.mapper; import com.example.mybatisdemo.model.UserInfo; import org.apache.ibatis.annotations.*; import jav…

mybatis的缓存机制

视频教程_免费高速下载|百度网盘-分享无限制 (baidu.com) MyBatis 有一套灵活而强大的缓存机制&#xff0c;主要分为两级缓存&#xff1a;一级缓存&#xff08;本地缓存&#xff09;和二级缓存&#xff08;全局缓存&#xff09;。 一级缓存&#xff08;本地缓存&#xff09;&a…

【网络奇遇记】揭秘计算机网络性能指标:全面指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 速率1.1 数据量1.2 速率 二. 带宽三. 吞吐量四. 时延4.1 发送时延4.2 传播时延…

PCIe-6328 八口USB3.0图像采集卡:专为工业自动化和机器视觉设计

PCIe-6328一块8口USB 3.0主控卡&#xff0c;专为工业自动化和机器视觉相关应用设计。USB 3.0或称作高速USB&#xff0c;是一项新兴总线技术&#xff0c;10倍于USB2.0的传输速度&#xff0c;尤其适用于高速数据存储和图 像设备。 绝大多数现有USB 3.0卡兼用多个接口于一个USB 3…

5. 函数调用过程汇编分析

函数调用约定 __cdecl 调用方式 __stdcall 调用方式 __fastcall 调用方式 函数调用栈帧分析 补充说明 不同的编译器实现不一样&#xff0c;上述情况只是VC6.0的编译实现即便是在同一个编译器&#xff0c;开启优化和关闭优化也不一样即便是同一个编译器同一种模式&#xff0c;3…

光催化专用设备太阳光模拟器装置

什么是光催化材料&#xff1f; 光催化材料是指通过该材料、在光的作用下发生的光化学反应所需的一类半导体催化剂材料。半导体是一种介于导体和绝缘体之间的物质&#xff0c;它有一个特殊的能带结构&#xff0c;即价带和导带之间有一个禁带&#xff0c;禁带的宽度决定了半导体…