当前位置: 首页 > news >正文

python数据类型之字符串

目录

1.字符串概念和注意事项

2.字符串内置函数

3.字符串的索引、切片和遍历

4.字符串运算符

5.字符串常用方法

性质判断

开头结尾判断

是否存在某个子串

大小写等格式转化

子串替换

删除两端空白字符

格式化字符串

分割与合并

6.字符串模板

7.exec 函数

8.字符串加密和解密


1.字符串概念和注意事项

字符串是 str 类的一个对象。
python中的字符串用单引号或者双引号都可以。
在 python 中,具有相同内容的字符串是 str 类的同一个对象,具有相同的 id。
s1 = "abc" 
s2 = "abc"
print(id(s1)) 
print(id(s1) == id(s2))  # True
一个字符串对象是不可变的,比如 s[0] = 'x' 这样的替换操作会报错
s = "abc"
s[2] = 'x'

报错提示

TypeError: 'str' object does not support item assignment

解释:s = "abc"表示生成了一个s变量,s = "abc"语句后,在内存中开辟了一块地址,专门用来存放"abc"这个字符串,且s当前所代表的内存地址是"abc"的地址。字符串对象不可变指的是"abc"是不可变的,s[0]='x'操作就是试图将存放在内存中的"abc"的第一个元素改为'x',这是不允许的。

如果你想要修改字符串中的某个字符,你必须创建一个新的字符串。例如,你可以通过切片(slicing)和字符串连接(concatenation)等来实现这一点

s = "abc"
s2 = s[:2] + 'x'
print(s2)  # abx

也可以对变量重新赋值,本质是对变量s更换了一个地址

s = "abc"
print(id(s))
s = "abx"
print(id(s))

2.字符串内置函数

常用的有len获取长度,max获取最大字符等

s = "ac1" 
print(len(s))  # 返回字符串的长度,3
print(max(s))  # 返回字符串中“最大”的字符,c
print(min(s))  # 返回字符串中“最小”的字符,1

3.字符串的索引、切片和遍历

字符串的下标
从左到右是是从 0 到 len(s)-1,从右(末尾)到左就是 -1 到 -len(s)
相当于有s[-x] = s[-x + len(s)] ,其中  -x 表示负数。
字符串的切片操作
s[start: end],返回的是从下标 start 开始到下标 end – 1 的一个字符串
意味着有如下等式
s[0: len(s)] = ss[: 4] = s[0: 4]
s[2: ] = s[2: len(s)]
s[ : ] = ss[ : -1] = s[0: -1] = s[0 : -1 + len(s)]
s[-2 : ] = s[-2 : len(s)] = s[-2 + len(s) : len(s)]
s[-5 : -2] = s[-5 + len(s) : -2 + len(s)]s[1 : y] = s[1 : len(s)] # 如果 y >= len(s)的话
s[2 : 1] = '' # 空串
s[2 : 2] = '' # 空串
用 for 循环遍历字符串中的所有字符
for ch in "abcd":print(ch, end=" ")  
# a b c d

4.字符串运算符

连接运算符 +
print('ab' + 'cd') # abcd
复制运算符 *
print('ab' * 2) # abab
print(2 * 'ab') # abab
in 和 not in 成员运算符
print('He' in "He and I") # True
print('he' in "He and I") # False
print('he' not in "he ta") # False
比较运算符 ==, !=, <, <=, >, >=
从下标 0 开始的第一个字符开始比较,若相等则判断下一个下标的字符,根据 ASCII 码大小判断
通常: 数字字符 < 大写字母字符 < 小写字母字符
print("abc" < "abcd")   # True
print("abd" < "a1c")   # False
print("Jane" < "Jacksandffs")  # False

5.字符串常用方法

性质判断

返回值为布尔变量 bool

s.isalnum(),如果字符串中的字符只有数字或者字母,则返回 True

s.isalpha(),如果字符串中的字符只有字母,则返回 True

s.isdigit(),如果字符串中的字符只有数字,则返回 True

s.isdecimal(),如果字符是十进制数字,则返回 True

print('234 '.isdigit()) # False
print('234'.isdigit()) # True

s.isidentifier(),如果这个字符串满足 python 标识符的要求,则返回 True

print('_radius'.isidentifier()) # True
print('2radius'.isidentifier()) # False
s.islower(),如果字符串中的字母部分全是小写的,且字符串不为空串,则返回 True
s.isupper(),如果字符串中的字母部分全是大写的,且字符串不为空串,则返回 True
print('2ad '.islower()) # True
print('2Ad '.islower()) # False
print('2AD '.isupper()) # True
s.isspace(),如果字符串中的字符只有空格,则返回 True
print('2 '.isspace()) # False
print(' '.isspace()) # True

开头结尾判断

s.endswith(s1),如果字符串 s 是以子串 s1 结尾,则返回 True
s.startswith(s2),如果字符串 s 是以子串 s2 开头,则返回 True
print('radius'.endswith("usa")) # False
print('radius'.startswith("ra")) # True

是否存在某个子串

s.find(s1, starti, endi),返回字符串 s 中第一次出现子串 s1 时,此时 s1 第一个字符的下标;找不到返回-1

s.rfind(s1, starti, endi),返回字符串 s 中最后一次出现子串 s1 时,此时 s1 第一个字符的下标;找不到返回-1

s.count(s1, starti, endi),返回子串 s1 在字符串 s 中出现的无覆盖的次数,index 在 starti 到 endi 之间查找
print("mynameisname".find('name'))  # 2
print("mynameisname".rfind('name'))  # 8
print("xxxxabc".count('xx'))  # 2
print("xxxxabcxxx".count('xx'))  # 3data = "hello world"
if data.find("age") == -1:print("not find")
else:print("exist")

大小写等格式转化

s.capitalize(),返回只大写第一个字符的字符串

s.lower(),返回全是小写的字符串

s.upper(),返回全是大写的字符串

s.title(),返回只将每个单词首字母大写的字符串

s.swapcase(),返回大小写互换的字符串,就是大写字母变成小写,小写字母变大写

print("the happy of python".title())  # The Happy Of Python

子串替换

s.replace(old, new),返回一个字符串,旧子串被替换成新子串
s = "abcd" 
s1 = s.replace("ab", "xyz")
print(s) # abcd
print(s1) # xyzcd

技巧:替换为空字符串表示删除

s = "abcdab"
s1 = s.replace("ab", "")
print(s)  # abcd
print(s1)  # cd

删除两端空白字符

字符 " ", \t, \n 等都被称作为空白字符,说明空格是空白字符的一种
s.strip(),返回字符串,删除了原字符串两端的空白字符
s.lstrip(),返回字符串,删除了原字符串左端的空白字符
s.rstrip(),返回字符串,删除了原字符串右端(末端)的空白字符
注意不能删除中间的空白字符
s = "  x  y  z   "
s1 = s.strip()
print(f"({s1})")   # (x  y  z)

格式化字符串

第一种方法:用 format 函数
第二种:用字符串自带方法
s.center(width, "*"),返回字符串,在指定宽度上居中对齐,第二个参数是填充,默认是填充空格
s.ljust(width),返回字符串,在指定宽度上左对齐
s.rjust(width),返回字符串,在指定宽度上右对齐
s = "abcd" 
s1 = s.center(10)
print(f"({s1})")   # (   abcd   )

分割与合并

完全切割
mystr = "A1021879743 # 1021879743 # www.1021879743@qq.com"
mylist = mystr.split(" # ")  # 按照 # 切割,返回列表
print(mylist)  # ['A1021879743', '1021879743', 'www.1021879743@qq.com']
次数切割
mystr = "88548 n 小姐 女 22 162"
mylist = mystr.split(" ", 2)  # 按空格切割,切割 2 次就停止
print(mylist)  # ['88548', 'n', '小姐 女 22 162']
按行切割
mystr = """88548 
n 小姐 女
22 162"""
mylist = mystr.splitlines()  # 根据换行符切割
print(mylist)   # ['88548 ', 'n 小姐 女', '22 162']

字符串partition()函数

partition()方法用来根据指定的分隔符将字符串进行分割。

如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。

如果未找到separator参数,字符串本身和两个空字符串

data = "name=bob;age=10"
ret = data.partition(";")
print(ret)   # ('name=bob', ';', 'age=10')data = "name=bob"
ret = data.partition(";")
print(ret)   # ('name=bob', '', '')

字符串合并:join 函数

将列表等可迭代对象按特定符号拼接成字符串

mystr = "这是一个国家级机密"
lst = list(mystr)
print(lst)  # ['这', '是', '一', '个', '国', '家', '级', '机', '密']newstr = "#".join(mystr)
print(newstr)  # 这#是#一#个#国#家#级#机#密

6.字符串模板

提前准备一个字符串模板,类似于作文模板,然后用的时候往作文模板里面的指定位置设置指定的值,即可生成一篇文章。
from string import Template  # string 模块导入 Template# print(type(Template))  # <class 'string._TemplateMetaclass'># 搭建模板
mystr = Template("hi, $name 你是 $baby")# 模板使用
print(mystr.substitute(name="罗翔", baby="老师"))
print(mystr.substitute(name="张三", baby="学生"))'''
hi, 罗翔 你是 老师
hi, 张三 你是 学生
'''

7.exec 函数

作用:将字符串当做命令行语句来执行

import os
mystr = 'os.system("notepad")'
exec(mystr)

8.字符串加密和解密

加密:按指定规律将字符串的每一个字符变为另一个字符。

解密:将加密后的内容指定规律还原原内容。

第一种:自定义加码:str.maketrans(old, new)

翻译替换
作用:翻译、解密
mystr = "hello python 我,我,你"
table = str.maketrans("我你 x", "他它 y")  # 我替换成他,你替换成它,x 替换成 y
print(mystr)  # hello python 我,我,你
print(mystr.translate(table))  # hello python 他,他,它
第二种:自定义通过 ASCII 码对字符加密
realStr = "这是一个国家级机密"
key = 5faceStr = [chr(ord(x) + key) for x in list(realStr)]
print(faceStr)  # ['连', '昴', '丅', '丯', '圂', '宻', '纬', '朿', '寋']correctStrList = [chr(ord(x) - key) for x in list(faceStr)]
correctStr = "".join(correctStrList)
print(correctStr)

这些是最基础最简单的加密解密,日常使用足够。


end

相关文章:

python数据类型之字符串

目录 1.字符串概念和注意事项 2.字符串内置函数 3.字符串的索引、切片和遍历 4.字符串运算符 5.字符串常用方法 性质判断 开头结尾判断 是否存在某个子串 大小写等格式转化 子串替换 删除两端空白字符 格式化字符串 分割与合并 6.字符串模板 7.exec 函数 8.字符…...

Vue3实战笔记(38)—粒子特效终章

文章目录 前言一、怎样使用官方提供的特效二、海葵特效总结 前言 官方还有很多漂亮的特效&#xff0c;但是vue3只有一个demo&#xff0c;例如我前面实现的两个页面就耗费了一些时间&#xff0c;今天记录一下tsparticles官方内置的几个特效的使用方法&#xff0c;一般这几个就足…...

晶体振荡器

一、晶振与晶体区别 晶振是有源晶振的简称&#xff0c;又叫振荡器&#xff0c;英文名称是oscillator&#xff0c;内部有时钟电路&#xff0c;只需供电便可产生振荡信号&#xff1b;晶体是无源晶振的简称&#xff0c;也叫谐振器&#xff0c;英文名称是crystal&#xff0c;是无极…...

单词可交互的弧形文本

在一个项目中&#xff0c;要求把少儿读本做成电子教材呈现出来&#xff0c;电子书的排版要求跟纸质书一致。其中&#xff0c;英语书有个需求&#xff1a;书中有些不规则排版的文本&#xff08;如下图所示&#xff09;&#xff0c;当随书音频播放时&#xff0c;被读到的文本要求…...

Linux——进程信号(一)

1.信号入门 1.1生活中的信号 什么是信号? 结合实际红绿灯、闹钟、游戏中的"&#xff01;"等等这些都是信号。 以红绿灯为例子&#xff1a; 一看到红绿灯我们就知道&#xff1a;红灯停、绿灯行&#xff1b;我们不仅知道它是一个红绿灯而且知道当其出现不同的状况…...

centos9 stream在线安装NVIDIA驱动(rockylinux9.4也成功安装nvidia驱动)

Install NVIDIA Drivers on CentOS Stream 9&#xff08;rockylinux9.4成功&#xff09; 主板为技嘉mz72-hb2 显卡为4090 一.Disable Secure Boot From the BIOS 二.Enabling the EPEL Repository on CentOS Stream 9 1.update the DNF package repository cache sudo dnf …...

springmvc不同格式的参数解析

参数解析 application/x-www-form-urlencoded格式 这种格式就是传统的表单提交格式&#xff0c;就是一个个的键值对&#xff0c;会进行url编码&#xff0c;使用springmvc接收时使用RequestParam来进行接收&#xff0c;与传入的字段一一对应&#xff0c;此时使用的参数处理器是R…...

Unity3D让BoxCollider根据子物体生成自适应大小

系列文章目录 unity工具 文章目录 系列文章目录unity工具 &#x1f449;前言&#x1f449;一、编辑器添加&#x1f449;二、代码动态添加的方法(第一种)&#x1f449;三、代码动态添加的方法(第二种)&#x1f449;四、重新设置模型的中心点&#x1f449;壁纸分享&#x1f449;…...

WSL 2 installation is incomplete.

使用的wsl2版本很旧&#xff0c;因此需要手动更新。 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi...

Servlet的request对象

request对象的继承关系 1.HttpServletRequest接口继承了ServletRequest接口&#xff0c;对其父接口进行了扩展&#xff0c;可以处理满足所有http协议的请求 2.HttpServletRequest和ServletRequest都是接口&#xff0c;不能创建对象&#xff0c;因此在tomcat底层定义实现类并创…...

蓝桥杯-合并数列

小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案&#xff0c;分别将它们列为两个数组 {a1, a2, …, an} 和 {b1, b2, …, bm}。两个数组的和相同。 定义一次合并操作可以将某数组内相邻的两个数合并为一个新数&#xff0c;新数的值是原来两…...

《web应用技术》第9次课后作业

一、将前面的代码继续完善功能 1、采用XML映射文件的形式来映射sql语句&#xff1b; 2、采用动态sql语句的方式&#xff0c;实现条件查询的分页。 二、学习git的使用。 1、每个小组将自己的项目上传到gitee&#xff0c;学会协作开发&#xff1b; 2、学会从gitee上拉取项目…...

FRAUDARCatchSync算法简介

参考&#xff1a;https://blog.51cto.com/u_15127663/2778705 1. 背景 Fraudar 要解决的问题是&#xff1a;找出社交网络中最善于伪装的虚假用户簇。虚假用户会通过增加和正常用户的联系来进行伪装&#xff0c;而这些伪装(边)会形成一个很密集的子网络&#xff0c;可以通过定义…...

刷题之将有序数组转换成二叉搜索树(leetcode)

将有序数组转换成二叉搜索树 正常递归&#xff0c;中序遍历 递归经常会把自己绕晕&#xff0c;还是得画图分析 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(null…...

K-means聚类模型教程(个人总结版)

K-means聚类是一种广泛应用于数据挖掘和数据分析的无监督学习算法。它通过将数据点分成K个簇&#xff08;cluster&#xff09;&#xff0c;使得同一簇内的数据点之间的相似度最大&#xff0c;不同簇之间的相似度最小。本文将详细介绍K-means聚类算法的背景、基本原理、具体实现…...

android怎么告诉系统不要回收

在Android中&#xff0c;如果你想告诉系统不要回收你的应用程序&#xff0c;可以通过设置Activity的属性来实现。你可以设置android:configChanges属性&#xff0c;指定在哪些配置更改时不重新创建Activity。 例如&#xff0c;如果你想指示系统在屏幕方向更改时不要重新创建Ac…...

【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)

1.问题描述&#xff1a; 应用内支付IAP Kit和Payment Kit的区别以及适用场景&#xff1f; 解决方案&#xff1a; IAP Kit是四方支付&#xff0c;仅支持在线虚拟商品&#xff0c;如会员&#xff0c;游戏钻石等&#xff0c;双框架支持全球&#xff0c;目前单框架暂时只支持国内…...

ubuntu设置root开机登录,允许root用户ssh远程登录

ubuntu与centos系统不同&#xff0c;默认root开机不能登录。 1、输入一下命令创建root密码&#xff0c;根据提示输入新密码 sudo passwd root 2、打开gdm-autologin文件&#xff0c;将auth required pam_succeed_if.so user ! root quiet_success这行注释掉&#xff0c;这行就…...

Web测试面试题(二)

一&#xff1a;简述HTTP协议的状态码包含哪些&#xff1f; 2XX&#xff0c;表示成功 3XX&#xff0c;表示重定向 4XX&#xff0c;表示客户端错误 5XX&#xff0c;表示服务器错误 二&#xff1a;HTTP和HTTPS的区别&#xff1f; 《1》安全性上的区别&#xff1a; HTTPS&#x…...

VBA宏指令写的方法突然不能用了

背景:项目组有个自动化测试项目,实在excel中利用VBA开发的;时间比较久远,我前面的哥们走后,这个软件一直在用,最近系统不知道是不是更新的缘故;有些代码除了问题; 先上源码: Dim Conn As Object, Rst As Object Dim sqlStr$ Dim str_start_SN$, str2$ str_start_SN …...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...