字符串的定义

  • 字符串是一个有序的字符集合,用来存储和表现基于文本的信息。
  • python 中字符串需要使用成对的单引号或双引号括起来,单引号和双引号的字符串是等效的;python 中还允许使用三引号(“”" 或者 ‘’’ )或双引号创建跨越多行的字符串,这种字符串中可以包含换行符、制表符及其他特殊字符。
# 例如,我们分别创建一个单引号字符串和双引号字符串,内容一样,通过函数 id()返回两个字符串常量的地址,会发现结果是相同的,即:结果会返回yes
a = 'python'
b = "python"
if id(a) == id(b):print("yes")
else:print("no")
>yes# 字符串输出时会去掉最外面一层引号,所以若想在输出的字符串中包含某个引号,则:# 输出语句包含单引号,最外层则使用双引号;其他情况则类似
print("我的名字叫'小明'吗")
> 我的名字叫'小明'吗print('我的名字叫"小明"吗')
> 我的名字叫"小明"吗print('''我的名字叫"""小明"""吗''')
> 我的名字叫"""小明"""吗# 如果一个三引号字符串没有被赋值给变量,则它会被python解释器默认为注释,否则,则会被当做字符串常量
a = '''
大家好:我是\n小明\t的大舅哥的姐姐\n的妹妹!
'''
print(a)
> 大家好:我是
小明  的大舅哥的姐姐
的妹妹!
  • 在 python 中,不支持字符类型,单个字符也是字符串。
  • 字符串是序列数据类型,可以为每个字符分配一个数字来指代这个元素的位置,即可以使用索引和切片。同样的也支持双向索引。
str = 'pyhon is a wonderful language!'# 正向索引(从0开始)、反向索引(从-1开始)
a, b, c = str[0], str[10], str[-1]
print(a, '-', b, '-', c)   # 此时意外发现b的位置是一个空格,别以为是bug# 切片[start:end:step]
str_1, str_2, str_3 = str[1:5], str[-5:-1], str[3:-9]
print(str_1, '-', str_2, '-', str_3)# 带有步长的切片(省略start意味着从0开始,省略end则到末尾结束,省略step则步长默认为1)
str_4 = str[1::-1]    # 步长为-1则默认倒着往前跳
str_5 = str[::-2]     # 步长的大小决定由哪些字符被切片
print(str_4, '-', str_5)
  • python 中的字符串支持以下几种类型:

    • Unicode字符串:不以u/U、r/R、b/B 开头的字符串(看这句就行),或以 u 或 U 开头的字符串。

    • 非转义的原始字符串:以 r 或 R 开头

    • bytes 字符串:以 b 或 B 开头
      可以使用 encode() 和 decode() 函数进行编码和解码,同样也可以使用 str() 和 bytes() 函数进行相同的操作。

# 字符串编码和解码print("Are you happy?")     # 普通字符串,本质是 Unicode 字符串
print(u"yes,i am")          # Unicode 字符串
print(r"d:\friends.txt")    # 非转义字符串的原始字符串
print(b"rejoice")           # bytes 字节串str = '中国'
print(bytes(str, "GBK"))    # 编译成字节串,采用 GBK 编码形式
print(bytes(str, 'utf-8'))  # 编译成字节串,采用 utf-8 编码形式# str(以 b 开头的字节流, 该字节流的编码方式)    # 还原为 Unicode 编码

字符串的创建

  1. 使用赋值运算符(=)创建字符串

其一般格式为:变量 = 字符串

language = 'python'
  1. 使用 str() 或 repr() 函数创建字符串

str() 或 repr() 函数的功能是将一个给定对象转换为字符串,其一般格式为:

'''其一般格式为:str(obj)  或 repr(obj)obj:要转换为字符串的对象,可以是数字,列表等各种对象repr()函数的用途更广泛,可以将任何 Python 对象转换为字符串对象
'''
>>> str(8.42)
'8.42'
>>> str(True)
'True'
>>> str([4,9,1,8])
'[4, 9, 1, 8]'>>> repr((32,5,4000,('Geogle','Runoob')))
"(32, 5, 4000, ('Geogle', 'Runoob'))"

字符串访问

三种方式:

  • 字符串名。访问字符串名就是访问整个字符串。
  • 字符串名[ index ]。访问字符串索引为 index 的字符。
  • 切片访问。访问指定索引范围的字符序列。
str = 'sophiscated'>>> str     # 整个字符串
'sophiscated'
>>> str[1]   # 字符串索引为 1 的字符
'o'
>>> str[:4]  # 索引为 4 之前的所有字符
'soph'

字符串运算

操作符 描述
+ 字符串连接
* 重复输出字符串
关系运算符(<, >, =, <=, >=) 按两个字符串的索引位置依次比较
in 如果字符串中包含给定的字符,则返回 True,否则返回 False
not in 如果字符串中不包含给定的字符,则返回 True,否则返回 False
# 字符串运算
str_1 = "my name is : " + "mark"   # + 运算符两边必须都是字符串,否则报错
str_2 = "love " * 3
str_3 = 'c' in 'cat'
str_4 = 'quite' > 'quiet'
print(str_1, str_2, str_3, str_4)
  • 在 Python 中,除了可以使用关系运算比较两个字符串外,也可以使用标准库模块 Operator 中的函数比较字符串的大小。
函数 相当于
lt(a, b) a < b
le(a, b) a <= b
eq(a, b) a == b
ne(a, b) a != b
gt(a, b) a > b
ge(a, b) a >= b

其中,a、b 为要比较的两个对象,可以是字符串类型,也可以是其他对象类型

import operator
str1 = 'superman'
str2 = 'monster'
print("'superman' < 'monster':", operator.lt(str1, str2))
print("'superman' <= 'monster':", operator.le(str1, str2))
print("'superman' == 'monster':", operator.eq(str1, str2))
print("'superman' != 'monster':", operator.ne(str1, str2))
print("'superman' > 'monster':", operator.ge(str1, str2))
print("'superman' >= 'monster':", operator.gt(str1, str2))'''
如果只是需要比较两个字符串是否相等,则也可以使用字符串的内置函数 __eq__(),注意是上下画线。
其一般形式为:  str1.__eq__(str)
如果字符串 str1 和 str2 相等,则返回True, 否则返回 False
'''
print(str1.__eq__(str2))

字符串函数

  1. 字符串查找函数
函数 功能说明
str.find(subStr[, beg[, end] ] ) 查找字符串 str 中是否包含子字符串 subStr,如果包含则返回 subStr 在 str 中第一次出现的位置索引值,否则返回 -1。beg 为查找开始位置, end 为查找结束位置
str.rfind(subStr[,beg[,end ] ]) 功能同 str.find(),不同的是从右边开始查找
str.index(subStr[,beg[,end ] ]) 查找字符串 str 中是否包含子字符串 subStr,如果包含则返回 subStr 在 str 中第一次出现的索引值,否则返回 -1。但是如果 subStr 不在 str 中则会报错
str.startwith(subStr) 检查 str 是否以指定字符串 subStr 开头,如果是则返回 True,否则返回 False
str.endwith(subStr) 检查 str 是否以指定字符串 subStr 结尾,如果是则返回 True,否则返回 False
str = '时间是一切财富中最宝贵的财富'
print("子字符串的位置: ", str.find("财富"))    # 从字符串左边开始查找
print("子字符串的位置: ", str.find("财富", 6))    # 从字符串左边索引为 6 的字符开始查找
print("子字符串的位置: ", str.rfind("财富"))    # 从字符串右边开始查找
print("子字符串的位置: ", str.rfind("财富", 4, 10))    # 从右边索引4~10的字符开始查找
print("字符串位置: ", str.rfind("成功"))         # 从字符串左边开始查找
print(str.startswith("时间"))
print(str.endswith("财富"))
  1. 字符串替换函数
函数 功能 参数说明
str.replace(oldStr, newStr [, max ] ) 把字符串中的旧字符串替换成新字符串 oldStr 为将被替换的子字符串, newStr 为新字符串, max为替换最大次数
str = "贝多芬是世界闻名的航海家"
print(str.replace("贝多芬", "哥伦布"))'''
哥伦布是世界闻名的航海家
'''
  1. 字符串拆分函数
函数 功能 参数说明
str.split(sep=" ", num=string.count(str)) 通过指定分隔符对字符串进行切片,返回一个字符串列表 sep 为分隔符,默认为空字符,包含空格、换行(\n)、制表符(\t)等。num 为分割次数
str = "Every cloud has a silver lining"
print(str.split())       # 使用默认分隔符拆分字符串
print(str.split(" ", 3))     # 使用默认分隔符拆分字符串为 4 个子字符串'''
['Every', 'cloud', 'has', 'a', 'silver', 'lining']
['Every', 'cloud', 'has', 'a silver lining']
'''
  1. 字符串转换函数
函数 功能说明
ord ( c) 与 chr() 函数一对与编码相关而功能相反的函数。返回单个字符的 Unicode 编码
chr(u) 返回 Unicode 编码对应的字符。如果所给的 Unicode 字符超出了 Python 定义范围,则会引发一个 TypeError 的异常

两个字符串之间的比较一般遵循如下规则:

  1. 如果都是西文字符串,则按照字符串每个字符的 ASCLL 编码逐个进行比较
  2. 如果都是中文字符串,则按照汉字的 Unicode 编码逐个进行比较
  3. 如果分别是汉字字符串和英文字符串,则统一按照它们的 Unicode 编码逐个进行比较,汉字字符串大于英文字符串
>>> print(ord('c'))
99
>>> print(ord('金'))
37329
>>> print(ord('输')>ord('赢'))
True
>>> print(chr(2345))
ऩ        # 这里显示有问题,应该是一个正方形,即方框
  1. 字符串格式化函数
一般格式 说明
格式化字符串.format(参数列表) 格式化字符串:包括参数序号和格式控制信息的字符串。

格式化控制信息可以是数据类型等,参数序号和格式控制信息包含在 { } 中。

# 字符串format 格式化
print("{:.2f}".format(3.1415926))    # 2 位小数
print("{:+.2f}".format(3.1415926))   # 带符号
print("{:0>2d}".format(6))         # 填充0,右对齐# 字符串format方式的使用,字符串里使用 {} 作为占位符
x = '我的名字是{},我今年{}岁了'.format('小明',29)
print(x)# 使用 {整数} 作为占位符
print('我的名字是{1},我今年{0}岁了'.format(10,'jerry'))# 使用 {变量名} 作为占位符
print('我的名字是{name},我今年{age}岁了'.format(89,'xiaoming',name='jerry',age=45))# 使用 {整数} 和 {变量名}混合使用,在传递参数时,变量名必须要放在最后
print('我的名字是{1},我今年{age}岁了。他是{name},他今年{0}岁了'.format(12,'merry',name='jerry',age=15))# 使用 {} 和 {变量名} 混合使用
print('我的名字是{},我今年{age}岁了。他是{name},他今年{}岁了'.format('chris',18,name='tony',age=20))
  1. 其他常用字符串函数
函数 描述 符号 返回结果
capitalize() 将字符串的第一个字符转换为大写 “python”.capitalize() Python
count(str, beg=0,end=len(str)) 返回子字符串在 str 中出现的次数 “This is an apple”.count(“is”) 2
len(string) 返回字符串长度 len(“python”) 6
isdecimal() 检查字符串是否值包含十进制字符,如果是则返回True,否则返回 False “128”.isdecimal() “12.8”.isdecimal() True False
isdigit() 如果字符串只包含数字则返回 True,否则返回 False “32”.isdigit() “32.3”.isdigit() True False
upper() 将字符串中的小写字母转换为大写 “hello”.upper() HELLO
lower() 将字符串中的大写字母转为小写 “HELLO”.lower() hello
swapcase() 将字符串中的大、小写字符互换(大写变小写,小写变大写) “Hello”.swapcase() hELLO
strip() 删除字符串两端的空格 " python ".strip() python(前后无空格)
rstrip() 删除字符串末尾的空格 " python ".rstrip() python(前有空格后无)
lstrip() 删除字符串开头的空格 " python ".lstrip() python(后有空格前无)
title() 返回"标题化"字符串,即首字母大写 “python”.title() Python
Islower() 如果所有字符都是小写则返回 True,否则返回 False “Scientist”.islower() “科学家”.islower() False False
isupper() 如果所有字符都是大写则返回 True,否则返回 False “Scientist”.islower() “科学家”.islower() False False

转义字符

当需要在字符串中使用特殊字符时,Python 使用反斜杠(\)转义字符。

转义字符 描述 转义字符 描述
\ 续行符(在行尾时) \n 换行
| 反斜杠符号 \v 纵向制表符
\’ 单引号 \t 横向制表符
\" 双引号 \r 回车
\a 响铃 \f 换页
\ (空格) 退格(BackSpace) \oyy 八进制数,yy代表的字符
\e 转义 \xyy 十六进制数,yy代表的字符
\000 \other 其他字符以普通格式输出
# 转义双引号可以 使:在双引号字符串输出中包含双引号
print("很多观众喜欢\"汉武大帝\"这部电视剧。")print("a = \t108")
print("d:\\b.py")

常量和变量

常量

常量一般指不需要改变也不能改变的常数或常量,如一个数字 3、一个字符串"中国",一个元组(3,4,5)等。
Python 中没有专门定义常量的方式,通常使用大写变量名表示。但是,这仅仅是一种提示和约定,并不是强制语法要求。

PI = 3.14
E = 2.7

变量

1. 变量概述
       在 Python 中,变量的是可以变化的。不仅值可以变,其类型也会随着值的不同而变化。(Python 是一种强制型语言,也是一种动态类型语言。Python 解释器会根据赋值或运算来推断变量类型,变量类型是随着其值随时变化的。)
       在使用变量时,不需要提前声明,只需要给这个变量赋值即可。当给一个变量赋值时即创建对应类型的变量。当用变量时,必须要给这个变量赋值。如果只声明一个变量而没有赋值,则Python 认为这个变量没有定义。

m = 120
print("m 的数据类型:", type(m))
m = "大数据"
print("m 的数据类型:", type(m))

2、变量命名
可以参考该文章中的 Python 编码规范之标识符规则。

3. 变量赋值

变量只有在赋值之后才能在内存中被创建。Python 使用赋值运算符(=)给变量赋值,一般格式为:
                  变量1,变量2,变量3,… = 表达式1,表达式2,表达式3,…

表达式可以是常量、已赋值的变量或表达式,也可以是一个序列对象。
如果多个变量的值相同,也可以使用如下格式:
变量1 = 变量2 = 变量3 = … = 变量n = 表达式

counter = 68       # 赋值常量
counter_1 = counter     # 赋值变量
counter_2 = lambda x:x[1]    # 赋值表达式
x = y = z = 120# 交换两个变量的值
a = 50; b = 60
print("交换前:a = %d, b = %d " % (a, b))
a, b = b, a
print("交换后:a = %d, b = %d " % (a, b))

4. Python 内存和变量管理

在 Python 中,采用的是基于值的内存管理方式,每个值在内存中只有一份存储。如果给多个变量赋相同的值,那么多个变量存储的都是指向这个值的内存地址,即 id,也就说,Python 中的变量并没有存储变量的值,而是存储指向这个值的地址或引用。

a = 16.8
b = 16.8
print("a的id为: ", id(a))      # 输出变量a 的引用
print("b的id为: ", id(b))      # 输出变量b 的引用a的id为:  2698593166416
b的id为:  2698593166416


在本例中,a 与 b 均相当于存储 16.8 数值地址的引用,指向同一地址。
但是,对于组合数据(如列表、元组等)而言,每次创建一个组合数据对象,都会重新给其分配内存。因此,给具有相同内容的组合数据类型分配的内存地址不同。

x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
print("id(x) = ", id(x))
print("id(y) = ", id(y))id(x) =  2225831982528
id(y) =  2225831945792

在 Python 中,给变量赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python 并没有复制这个对象,而只是复制了这个对象的引用。这对于所有数据类型(包括组合数据类型)是一样的。

a = 100
b = a        # 本质是 a 把指向 100 的地址复制给变量b
print("id(a): ", id(a))
print("id(b): ", id(b))id(a):  2744494329168
id(b):  2744494329168


由上图可见,执行 b = a 语句时复制给变量 b 的其实是 a 的地址,而不是 100 这个值。
Python具有自动内存管理功能,会跟踪所有的值,自动删除不再有变量指向的值。因此,Python 程序员一般不考虑内存管理的问题。


写在最后:
首先,如果本篇文章有任何错误,烦请读者告知!不胜感激!
其次,本篇文章仅用于日常学习以及学业复习,如需转载等操作请告知作者(我)一声!
最后,本文会持续修改和更新,如果对本分栏的其他知识也感兴趣,可以移步目录导航专栏,查看本分栏的目录结构,也更方便对于知识的系统总结!
兄弟姐妹们,点个赞呗!
感谢!笔芯!

python 字符串类型相关推荐

  1. Python 字符串类型 - 详细

    Python 字符串类型 Python 不支持单字符类型,一个字符在 Python 中,也是作为一个字符串使用. 一. 访问字符串的值 可以通过索引和切片来访问字符串的值 mystr = 'hello ...

  2. Python字符串类型及操作总结

    1.字符串表示 两种类型四种表示 单行-一对单引号或一对双引号 "python" 'python' 多行-一对三单引号或一对三双引号 '''python''' "&quo ...

  3. python字符串类型_python字符串类型介绍

    一. 字符串的写法 1.单引号或双引号 二. 字符串是不会变的 1.字符串不会变,只会新增后再赋值 a = 'ABC' b = a a = 'XYZ' print(b) 结果还是ABC 三. 字符串的 ...

  4. Python字符串类型及操作(含实例)

    字符串 由0个或多个字符组成的有序字符序列 字符串是字符的有序序列,可以对其中的字符进行索引 "智"是"智慧女孩千万不要秃头"的第0个字符 字符串有2类共四种表 ...

  5. python字符串类型_Python3的字符串类型(疯狂Python)

    先看一下本篇文章要讲的内容目录: 4.2 字符串入门String4.2.1 repr和字符串4.2.2 input和raw_input4.2.3 长字符串4.2.4 bytes4.2.5 字符串格式化 ...

  6. python字符串类型图解_Python基础——数据类型(图解+实例,非常详细!)

    内容及版权声明:笔记是根据开课吧--Python语法爬虫分析课和自己的理解记录,其中包含课程的截图,仅学习分享使用,如有侵权请私信删除! 目录 Python中常见的数据类型 变量:(相当于杯子可以往里 ...

  7. python字符串类型判断(python中datatype()测试字符串类型)

    python如何判断变量是否是字符串 Python中的数据类型有数字.字符串,列表.元组.字典.集合等. 相关推荐:<Python教程> python中,判断某变量的数据类型是否为字符串, ...

  8. Python字符串类型

    特点 1.字符串一旦定义不允许修改,可以替换.字符串容器中的元素都是字符类型的.2.字符串是一个不可修改的序列,当我们对字符串进行修改的时候,实际上是生成了一个新的被修改后的对象,而原字符串没有发生修 ...

  9. 18.Python字符串类型及常用内置方法

    文章目录 1.字符串 2.字符串的定义 3.打印引号 4.类型转换 5.索引取值 6.遍历 7.长度统计 8.字符串复制与拼接 8.1字符串的复制 8.2加号拼接 8.3join拼接 8.4字符截取拼 ...

  10. 【python学习】python字符串类型

    中国史之[涿鹿之战]: 黄帝部族联合炎帝部族,与蚩(chi)尤所进行的一场大战.最终以蚩尤的失败收场,从而奠定了黄帝轩辕氏成为中国人文始祖的地位.这也是中国史上记载的最早的战场. -来源:全历史APP ...

最新文章

  1. 打靶归来——记参加射击比赛感想
  2. 三元一次方程组步骤_[七年级网上课堂]8.4 三元一次方程组
  3. Linux文件目录类命令
  4. Git多人协作工作流程
  5. 打开链接跳转浏览器代码
  6. Java消息中间件--JMS规范
  7. linux运维项目redis简历,redis简介
  8. python 正则表达式学习-group
  9. C#字节数组转换成字符串
  10. Dxdesigner SCH to Mentor PCB
  11. (强烈推荐)无线网络密码破解方法
  12. snownlp情感分析
  13. 不同调制方式的PWM谐波分析
  14. 淘宝网打开很慢、特别慢的完美解决方法
  15. 树莓派csi摄像头和usb摄像头_树莓派usb摄像头用fswebcam 设置
  16. 计算机绘画教案风车,电脑动画美术教案
  17. 从零开始javaweb项目——毕业设计参考指南
  18. String字符串中 intern()方法的理解(重难点)
  19. 切片软件 cura linux,Ubuntu系统入门教程-3D打印切片软件cura
  20. [学习打卡]Python基础入门(一)

热门文章

  1. 太阳与彩虹---开始!
  2. pdf文件怎么免费转换成txt文件
  3. struts,spring,hibernate,convent plugin
  4. 中专计算机春季2020招生学校,2020年春季招生的铁路学校
  5. android studio创建 styles v19 styles v21
  6. 【智能锁解决方案】全方位解析智能门锁的结构
  7. PowerShell 安装、配置和美化
  8. 使用node中fs模块创建和删除文件夹
  9. 十分钟了解Docker(我的Docker学习笔记)
  10. voliate可见性和有序性原理——硬件以及软件层面分析