python学习 --- 字符串基础

news2024/11/15 23:59:35

目录

一、字符串的驻留机制

1、驻留机制

2、驻留机制的几种情况(使用交互模式)

3、强制驻留

4、字符串驻留机制的优缺点

二、字符串的常用操作

1、字符串的查询操作

2、字符串大小写转换操作

3、字符串内容对齐操作

4、字符串劈分操作

5、判断字符串操作

6、字符串的替换与合并

 三、字符串的比较操作

四、字符串的切片操作

五、格式化字符串

1、%作为占位符

2、{}作为占位符

3、f-string

六、字符串的编码转换

1、为什么需要字符串的编码转换?

2、编码与解码的方式


一、字符串的驻留机制

1、驻留机制

在Python中字符串是基本数据类型,是一个不可变的字符序列。

仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量

a = 'python' #单引号,双引号,三引号均可
b = "python"
c = '''python'''
print(a, id(a))
print(b, id(b))
print(c, id(c))

再来看看控制台的输出结果------> 发现它们的id是一样的

说明这里的a对象,b对象,c对象再内存中只有一份

2、驻留机制的几种情况(使用交互模式)

为什么使用交互式?

因为PyCharm对字符串进行了优化处理,对内容相同的字符串做了强制处理。

  • 字符串的长度为0或1时
  • 符合标识符的字符串
  • 字符串只在编译时进行驻留,而非运行时
  • [-5,256]之间的整数数字 

 

 字符串只在编译时进行驻留,而非运行时------>看注释

a = 'abc'
b = 'ab'+'c'
c = ''.join(['ab','c'])
print(a is b) #True
print(a is c) #False
# b在编译时就接上了成为'abc',进行了驻留
# c在运行时成为'abc',没有驻留
# 所以此时a,b指向同一块内存空间,而c指向另一块内存空间

3、强制驻留

sys中的intern方法强制2个字符串指向同一个对象。

4、字符串驻留机制的优缺点

  • 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
  • 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。

二、字符串的常用操作

1、字符串的查询操作

s = 'hello,hello'
print(s.index('lo')) #3
print(s.find('lo')) #3
print(s.rindex('lo')) #9
print(s.rfind('lo')) #9

2、字符串大小写转换操作

3、字符串内容对齐操作

4、字符串劈分操作

s1 = 'hello world python'
print(s1.split())
s2 = 'hello|world|python'
print(s2.split(sep='|'))
print(s2.split(sep='|',maxsplit=1))
# ['hello', 'world', 'python']
# ['hello', 'world', 'python']
# ['hello', 'world|python']

5、判断字符串操作

6、字符串的替换与合并

s = 'hello,python,python,python'
print(s.replace('python','java'))
print(s.replace('python','java',2))
# hello,java,java,java
# hello,java,java,python
lst = ['hello','java','python']
print("|".join(lst))
print('/'.join(lst))
t = ('hello','java','python')
print(" ".join(t))
print('@'.join('python'))
# hello|java|python
# hello/java/python
# hello java python
#p@y@t@h@o@n

 三、字符串的比较操作

运算符:>,>=,<,<=,==,!=

比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较。

比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符。

四、字符串的切片操作

字符串是不可变类型,与列表切片的异同:

  • :不具备增、删、改等操作
  • :切片操作将产生新的对象

具体细节在之前写的列表基础文章中有介绍,找到列表切片即可,以下是文章链接: 
python学习 --- 列表基础_wo-yu的博客-CSDN博客列表的创建,列表的特点,获取列表中元素,切片,列表元素的查询和遍历,列表元素的增删改,列表的排序,列表生成式https://blog.csdn.net/qq_61768389/article/details/128664704?spm=1001.2014.3001.5501

五、格式化字符串

1、%作为占位符

 

name = '恶习之龙'
degree = 1
print('副本%s,难度%d级' % (name,degree))
#副本恶习之龙,难度1级

这个方式的写法其实与C有些类似

 

2、{}作为占位符

0,1是索引

name = '恶习之龙'
degree = 1
print('这是副本{0},难度{1}级,真的是{0}'.format(name,degree))
#这是副本恶习之龙,难度1级,真的是恶习之龙

3、f-string

name = '恶习之龙'
degree = 1
print(f'这是副本{name},难度{degree}级!')
#这是副本恶习之龙,难度1级!

六、字符串的编码转换

1、为什么需要字符串的编码转换?

2、编码与解码的方式

编码:将字符串转换为二进制数据(bytes)

解码:将bytes类型的数据转换成字符串类型

s = '恶习之龙'
#编码
print(s.encode(encoding='GBK')) #在GBK这种编码格式中,一个中文占两个字节
print(s.encode(encoding='UTF-8')) #在UTF-8这种编码格式中,一个中文占三个字节
#解码
#byte代表的是一个二进制数据(字节类型的数据)
byte = s.encode(encoding='GBK')
print(byte.decode(encoding='GBK'))
# b'\xb6\xf1\xcf\xb0\xd6\xae\xc1\xfa'
# b'\xe6\x81\xb6\xe4\xb9\xa0\xe4\xb9\x8b\xe9\xbe\x99'
# 恶习之龙

 ---------------------------------------------------------结束-----------------------------------------------------------------

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

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

相关文章

【c语言进阶】动态内存管理知识大全(下)

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏c语言学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大的激励和…

AxMath使用教程+常用符号与公式(持续更新中)

前言 这两天学了学Latex&#xff0c;主要是为了以后写毕业论文做铺垫&#xff0c;而且Latex在数学公式这一方面&#xff0c;要比Word方便许多&#xff0c;于是我就下载了一款国产的公式编辑器——AxMath。永久会员不贵&#xff0c;只要36元&#xff0c;而且软件很好用&#xf…

vue全家桶(一)基础知识

vue全家桶&#xff08;一&#xff09;1.vue基本使用2.vue模板语法1.差值表达式2.指令1.什么是指令2.数据绑定指令3.双向数据绑定4.事件绑定4.1click4.2事件修饰符4.3按键修饰符4.4属性绑定4.5-指令v-model的本质4.6 样式绑定4.6.1 class样式处理4.6.2 style样式处理4.7 分支循环…

Pytorch深度强化学习案例:基于DQN实现Flappy Bird游戏与分析

目录1 案例介绍2 构造深度Q网络3 经验回放与目标网络4 训练流程5 实验分析1 案例介绍 Flappy Bird是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品&#xff0c;于2013年5月24日上线。 在Flappy Bird中&#xff0c;玩家只需要用一根手指来操控&#xff1a;点击一次屏…

P49 BFC 块级格式化上下文 块级格式化上下文 BFC渲染区域: 创建BFC的元素,它的自动高度需要计算浮动元素. 高度塌陷例子

目录块级格式化上下文BFC渲染区域:创建BFC的元素&#xff0c;它的自动高度需要计算浮动元素.高度塌陷例子&#xff1a;第一种方法 clearfix::after第二种解决办法 :绝对定位第三种解决办法&#xff1a;overflow: scroll;第四种方法&#xff1a;clearfix hidden创建BFC的元素&am…

21版本FL Studio水果音乐制作软件下载

因为对音乐有一些了解&#xff0c;所以周边有不少朋友会问我很多关于音乐的问题&#xff0c;其中比较多是学习音乐到底用哪款软件比较好。每次遇到这样的问题&#xff0c;我都会告诉他们&#xff0c;就是我一直在用的音乐制作软件FL Studio。音乐制作软件FL Studio&#xff0c;…

【JavaGuide面试总结】Java集合篇·中

【JavaGuide面试总结】Java集合篇中1.Collection 子接口之 SetComparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同2.Collection 子接口之 QueueQueue 与 Deque 的区别ArrayDeque 与 LinkedList 的区别说一说 PriorityQueue3.Map 接口HashMap 的…

机器学习(八):深度学习简介

文章目录 深度学习简介 一、神经网络简介 二、深度学习各层负责内容 深度学习简介 一、神经网络简介 深度学习&#xff08;Deep Learning&#xff09;&#xff08;也称为深度结构学习【Deep Structured Learning】、层次学习【Hierarchical Learning】或者是深度机器学习【…

React中commit阶段发生了什么

对于commit阶段的主要工作是循环effectList链表去将有更新的fiber节点应用到页面上是commit的主要工作。 EffectList 什么是副作用&#xff1f; 函数在执行过程中对外部造成的影响可以称之为副作用&#xff0c;副作用包含的类型很多&#xff0c;比如说标记值为Placement时&a…

客快物流大数据项目(一百零九):Spring Boot概述

文章目录 Spring Boot概述 一、什么是SpringBoot 二、​​​​​​​为什么要学习Spring Boot

PHP转Go实践:xjson解析神器「开源工具集」

前言 近期会更新一系列开源项目的文章&#xff0c;新的一年会和大家做更多的开源项目&#xff0c;也欢迎大家加入进来。 xutil 今天分享的文章源自于开源项目jinzaigo/xutil的封装。 在封装过程中&#xff0c;劲仔将实现原理以及相关实践思考&#xff0c;写成文章分享出来&am…

Python3学习——条件控制、循环语句与迭代器

目录 一、编程第一步——斐波那契数列 二、条件控制 (一)if/else语句 判断狗狗的年龄&#xff1a; (二)多层if/else嵌套 判断数字能否被2或3整除&#xff1a; (三)match...case匹配——python3中新增 根据数字判断星期&#xff1a; 三、循环语句 (一)while循环 1.循环…

Java:Idea创建项目和Spring工程基本使用

一、创建项目 1、创建新的空的项目&#xff1a; Empty Project–next 2、定义项目的名称&#xff0c;并指定位置 3、对项目进行设置&#xff0c;JDK版本、编译版本 4、添加模块信息 5、修改maven路径 6、项目目录结构 二、搭建Spring的框架 1、在核心配置文件中添加Spring的j…

C++11 并发指南五(stdcondition_variable 详解)

C11 并发指南五(std::condition_variable 详解) 文章目录C11 并发指南五(std::condition_variable 详解)std::condition_variable 类介绍std::condition_variable_any 介绍std::cv_status 枚举类型介绍std::notify_all_at_thread_exit前面三讲《 C11 并发指南二(std::thread 详…

二叉树简单解析(1)

&#x1f340;本人简介&#xff1a; 吉师大一最爱逃课的混子、 华为云享专家、阿里云专家博主、腾讯云自媒体分享计划博主、 华为MindSpore优秀开发者、迷雾安全团队核心成员&#xff0c;CSDN2022年运维与安全领域第15名 &#x1f341;本人制作小程序以及资源分享地址&#x…

英语学习打卡day7

2023.1.27 1.ironically adv.具有讽刺意味的是;反讽地&#xff0c;讽刺地 Ironically, his cold got better on the last day of his holiday. 2.bequeath vt.遗赠;把…遗赠给;把… .传给 (比give更正式) bequeath sb sth bequeath sth to sb Don’t bequeath the problem …

JDK17 || JDK 8 完美 卸载 教程 (Windows版)

文章目录一、卸载jdk程序1 . 找到控制面板2. 卸载程序3. 找到JDK 相关的程序4. 右键 选择卸载程序5. 下一步 选择 是6.下一步 选择 是二、安装 新版 JDK三、如果不想再使用jdk环境结语一、卸载jdk程序 1 . 找到控制面板 2. 卸载程序 3. 找到JDK 相关的程序 4. 右键 选择卸载程…

IDEA界面和控制台的滚动条颜色不明显?赶快换一个吧!

前言 不知道大家是否和我一样有这么一个烦恼&#xff1a; IDEA自带的滚动条颜色很暗&#xff0c;配上一些主题颜色搭配很难发现。 所以今天就想着怎么可以修改滚动条颜色&#xff0c;首先去网上搜了搜都是什么鼠标滚轮加shift滚动&#xff0c;一点也不实用 偶然看到了个不错的…

【青训营】Go的BenchMark的使用

本文内容总结于 字节跳动青年训练营 第五届后端组 Go自带了一些性能测试工具&#xff0c;其中BenchMark是较为重要的一个。 我们以计算斐波那契数列的示例来展示BenchMark的使用 package Benchmarkimport "testing"func Fib(n int) int {if n < 2 {return n}ret…

OpenCV-PyQT项目实战(1)安装与环境配置

本系列从零开始实战解说基于 PyQt5 的 OpenCV 项目开发。 欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;OpenCV导入图像 文章目录1. PyQt5 …