热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1.Python的基本数据类型字符串

目录零.前言一.字符串的赋值与格式化处理1.初始化2.格式化二.字符串操作1.遍历2.拼接3.切片4.反转5.查找替换三.字符串编码零.前言python的字符串算是吸引我学习py


目录

  • 零. 前言
  • 一. 字符串的赋值与格式化处理
    • 1. 初始化
    • 2. 格式化
  • 二. 字符串操作
    • 1. 遍历
    • 2. 拼接
    • 3. 切片
    • 4. 反转
    • 5. 查找替换
  • 三. 字符串编码


零. 前言

python的字符串算是吸引我学习python的最直接原因

当初学c的时候, 定义一个字符串需要初始化一个字符数组, 然后往这个数组里面一个一个的填字符, 麻烦至极, 但是在python中却优雅的很, 直接变量名加上等于符号即可

example = "string"

于是, 便走上了学python的坑. 这篇博客也是想聊聊Python的字符串这一数据结构, 主要的内容如下:


  1. 字符串的赋值格式化处理
  2. 字符串的常用的一些内置函数
  3. 字符串编码

一. 字符串的赋值与格式化处理


1. 初始化

在Python中, 字符串的初始化有以下三种: ‘’(单引号), “”(双引号), “”""""(三重引号)

其中, 单双引号("", “”"") 没有太大的本质区别, 在开发中主要的用途是兼容字符串中出现的引号,
比如, 如果字符串中有单引号(’’), 那么就可以使用双引号来避免使用转义符

some_string = "single quotation marks '' in init string"

同理, 如果在字符串中有双引号(""), 那么外面就要用单引号来初始化

some_stirng = 'double quotation marks "" in init string '

三重引号的使用场景是可以保存字符串的格式(三重引号可以是’’‘something’’’, 也可以是""“some thing”""):

string_a = """
a
b
c
"""# output:
# a
# b
# c

2. 格式化

字符串的格式化有以下种方式:


  1. % 操作符

这个操作符和c语言类似, 也是因为python是c写的, 所以语言的语法借鉴:

特殊的是, 这个%s会自动将数字也转成字符

a = "this is %s" % "hello"
b = "this is %s" % 11
# output
# a: 'this is hello'
# b: 'this is 11'

  1. format函数

format表达式是后面提出的, 主要是为了解决字符串中如果要填的值太多容易导致混乱的问题

a = "{a}, {b}, {c}".format(a=11, b=22, c=22)
# output
# a: '11, 22, 22'

  1. f表达式

f表达的使用有两个比较重要的好处:


  1. 可以清楚的看到这个字符串中使用的变量名

name = "xxz"
age = 17
a = f"my name is {name}, and i am {age}"
# output:
# a: 'my name is xxz, and i am 17'

  1. 可以在f表达式中进行一些函数执行或者变量的操作

first_name = "x"
second_name = "xz"
a = f"my name is {first_name}{second_name}"
# output:
# a: 'my name is xxz'

二. 字符串操作


1. 遍历

在python中, 字符串是可迭代的, 有两种方式, 直接迭代字符串, 迭代项为字符, 第二种是使用range函数迭代索引, 迭代项为索引号码

a = "abcdef"
for i1 in a:print(i1)
# i1是字符, abcdeffor i2 in range(len(a)):print(i2)print(a[i2])
# i2是索引数字, 01234
# a[i2]即为对应位置的字符: abcdef

2. 拼接

在python中, 拼接字符可以简单的用 + 操作符来实现

str_1 = "a"
str_2 = "b"
final = str1 + str2
# output: ab

常用的情况是拼接列表中的多个字符串

string_l = ["a", "b", "c", "d"]
new_str = ""
for i in string_l:new_str += i
# output: abcd

这里值得一提的是在Python中, 字符串是不可变对象, 所以这种操作的代价很高, 更好的拼接操作是用join

string_l = ["a", "b", "c", "d"]
new_str = "".join(string_l)
# output: abcd

此外, 在Cpython中, 字符串在只有一个字符串引用的情况下是可变的, 但是根据PEP8 中的规则, python开发最好不要和底层实现关系过大, 保证在各种实现中效果一致, 所以统一使用join操作符回比价好


3. 切片

python的切片用来获取字符串中想要的部分, 使用分片操作符[param1:param2:param3]

第一个参数是开头, 第二个参数是结尾, 第三个参数是间隔获取

例如下面这个例子, 我们需要前五个字符

all_string = "abcde1314564"
need_string = all_stirng[0:5]
# need_string: abced

切片获取的原则是顾头不顾尾, 这样设计的好处有两个:

方便分开获取, 例如以5为界限, 前半部分和后半部分的获取就是[0:5]和[5:] :

all_string = "abcde1314564"
first_string = all_stirng[0:5]
second_string = all_string[5:]
# need_string: abced

方便计算需要的个数, 例如第一个例子中的前五个, 那么切片的第二个数字就是5


4. 反转

字符串经常会有反转的需求, 常用的两个方式是切片和join

old_string = "abcde"
new_string = old_string[::-1]
new_string2 = ''.join(reversed(old_string))
# output: new_string:edcba new_string2:edcba

5. 查找替换

先说查找, 在实际开发中一般用到的是查找字符是否在字符串中和找到字符的位置

find_string = "c"
string_test = "abcde"
find_string in string_test # True
string_test.index(find_string) # 0

接着是替换, 是内置的replace函数, 同样, 如果想消除字符串中的某个字符, 可以将要删除的字符替换为空

old_string = "abcde"
new_string = old_string.replace("a", "b") # bbcde
new_string2 = old_string.replace("a", "") # bcde

三. 字符串编码

python与其他的数据格式最大的不同在于他还有个编码问题, 在很多代码中大家都可以看见这样一个注释

# -*-coding:utf-8 -*-

这个注释的作用就是用来指定编码, 告诉python的解释器这个该文件的保存格式是utf-8, 防止文件中含有中文导致报错

当然, 这个注视是源自于python2的pep8编码规范(https://peps.python.org/pep-0263/), 现在在python3中默认的编码格式就是utf-8, 所以现在新的项目中就很少出现了

补充, 计算机编码的历史:

数字 =》英文编码(acill) =》各国语言编码(GB2312, Euc-krd等) =》所有国家统一语言编码(unicode) =》 节约资源的可变长度编码(utf-8)


推荐阅读
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
最最后的力气撑起最灿烂的微笑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有