当前位置:   article > 正文

python数据结构之字符串详解_python 数据结构 字符串

python 数据结构 字符串

目录

一、什么是字符串

二、字符串的特性

1.拼接

2.字符串的格式化输出

 3.字符串索引

 4.字符串分片

5.字符串的不可变性

三、字符串的好用函数

1.大小写切换

2.分割、组合和移除

①split()

②join()

③strip()

3.统计、定位与替换

4.判断字符串是否以某个字符开头或者结尾

四、format格式化输出方法

1.format()的字符串格式化方法

2.format()的格式控制

Ⅰ.填充,对齐,宽度字段的使用示例

Ⅱ.千分号,精度,类型的使用示例

五、总结


一、什么是字符串

诸如一对英文双引号或单引号以及三引号包裹的任何数据称为字符串。三引号与其他两个引号的不同点在于三引号是可以换行的,其他两个引号包裹的只限于单行。

  1. str1 = "haha"
  2. str2 = 'xixi'
  3. str3 = '''哇啊啊啊,
  4. 张彬彬真的好帅,
  5. 怎么会有张彬彬这么帅的人!!'''
  6. print(str1)
  7. print("-------")
  8. print(str2)
  9. print("-------")
  10. print(str3)
  11. 结果:
  12. haha
  13. -------
  14. xixi
  15. -------
  16. 哇啊啊啊,
  17. 张彬彬真的好帅,
  18. 怎么会有张彬彬这么帅的人!!

二、字符串的特性

1.拼接

字符串跟列表非常类似,比如字符串具有拼接的特点,列表也有。可见n个相同的字符串拼接等于n*该字符串。字符串1+字符串2=在字符串1后面拼接字符串2的内容

  1. s1 = "数据结构"
  2. s2 = s1 + s1 +s1
  3. s3 = s1*3
  4. s4 = "python"
  5. print("s2",s2)
  6. print("s3",s3)
  7. print("s1+s4",s1+s4)
  8. print("s4+s1",s4+s1)
  9. 结果:
  10. s2 数据结构数据结构数据结构
  11. s3 数据结构数据结构数据结构
  12. s1+s4 数据结构python
  13. s4+s1 python数据结构

2.字符串的格式化输出

形如下的输出为字符串的格式化输出,其中%s,%d称为占位符,“%()”的形式为格式化输出,其中%为运算符,括号为元组。

  1. def print_info(name,heigh):
  2. print("%s身高为%d厘米"%(name,heigh))
  3. print_info("张彬彬",183)
  4. print_info("杨洋",180)
  5. 结果:
  6. 张彬彬身高为183厘米
  7. 杨洋身高为180厘米

常见的占位符和和意义如下表:

占位符意义
%s字符串
%d正数
%f浮点数
%x十六进制整数

ps:如果你不太确定应该用什么占位符,%s 是万能的,它会把任何数据类型转换为字符串。

 3.字符串索引

与列表类似,字符串也有索引,并且也支持正向索引和反向索引。正向索引是从 0 开始计数,而反向索引则是从 -1 开始计数,这一点一定要记清楚。一般我们采取“就近原则”来决定使用正向索引还是反向索引——即访问靠前的元素用正向索引,靠后的元素用反向索引,这样就可以尽可能少地数这是第几个元素了。注意:空格也占一个索引的位置。

  1. str = 'Hello World'
  2. print(str[6]) # 输出:W
  3. print(str[5]) # 输出: 空格
  4. print(str[-5]) # 输出:W
'
运行

为了让大家更清楚,截个图给大家看一下:

 可见第三行是一个空格,因为print函数是自带换行的特性的,所以三个print输出的结果为三行。特殊说明一下。print函数也可以取消换行,如果这样的话,需要在结尾加上end属性,可以改为以你想要的字符结尾。

  1. str = 'Hello World'
  2. print(str[6],end="&") # 输出:W,以&号结尾
  3. print(str[5],end="") # 输出: 空格,并且不含有结尾符号
  4. print(str[-5],end=",") # 输出:W,以英文逗号结尾
  5. print()#换行输出
  6. print(str[0],end="*")#输出:H,以*号结尾
  7. 结果:
  8. W& W,
  9. H*

 4.字符串分片

字符串的分片与列表分片一样,举个栗子:

  1. str = 'Hello World'
  2. # 下面两个效果一样
  3. print(str[6:]) # 输出:World
  4. print(str[-5:]) # 输出:World
'
运行

string[n:m],表示从索引n开始,到索引m-1结束的子字符串,是一个左闭右开的区间。其中

m-n=子字符串中的字符个数。分片中前后索引的值是可以省略的,前索引省略默认为 0,后索引省略默认为序列长度。

  1. string = 'Hello World'
  2. # 从索引 0 开始,到索引 3 为止,不包括索引 3
  3. print(string[0:3])
  4. # 输出:Hel
  5. # 如果第一个索引是 0,可以省略
  6. print(string[:3])
  7. # 输出:Hel
  8. print(string[3:11])
  9. # 输出:lo World
  10. # 如果分片到末尾,后面也可以省略
  11. print(string[3:])
  12. # 输出:lo World
  13. # 如果都省略,则是复制一个一样的字符串
  14. print(string[:])
  15. # 输出:Hello World
'
运行

再看一个例子:

  1. string = 'Hello World'
  2. print(string[0:100000])
  3. l = ['H','L']
  4. print(l[0:7])
  5. 结果:
  6. Hello World
  7. ['H', 'L']

可能在没有输出之前,可能我们会觉得这两个会报错,因为觉得索引越界,其实不然。字符串和列表可以想象成绳子,分片就是用刀将绳子切分开来。在字符串和列表长度内分片相当于在绳子上切割,而超出范围相当于一刀砍到了空气,对于绳子来说没有影响。但是,如果不是切片,是索引的话,就会报错,产生索引越界。

5.字符串的不可变性

字符串与元组一样,具体有不可变性。例如

  1. s1 = "鹿班七号"
  2. s1[0] = "鲁"
  3. print(s1)
  4. 结果:
  5. TypeError: 'str' object does not support item assignment

那如果我们想把这个字改成正确的可以怎么操作呢?我们可以采用字符串的可拼接性。

  1. s1 = "鹿班七号"
  2. s2 = "鲁" +s1[1:]
  3. print(s2)
  4. 结果:
  5. 鲁班七号

三、字符串的好用函数

1.大小写切换

函数名作用
upper()字符串中所有的字母都大写
lower()字符串中所有的字母都小写
capitalize()字符串的第一个字母变成大写,其他字母变小写。首字符如果是非字母则不变,其他字母变小写。
title()字符串中每个单词的首个字符大写
swapcase()字符串中的大写字母改成小写,小写字母改成大写
  1. string = "today is a Happy day"
  2. print("原字符",string)
  3. print("upper()---->",string.upper())
  4. print("lower()---->",string.lower())
  5. print("capitalize()---->",string.capitalize())
  6. print("title()---->",string.title())
  7. print("swapcase()---->",string.swapcase())
'
运行
  1. 结果:
  2. 原字符 today is a Happy day
  3. upper()----> TODAY IS A HAPPY DAY #全大写
  4. lower()----> today is a happy day #全小写
  5. capitalize()----> Today is a happy day #只有开头第一个单词首字母大写
  6. title()----> Today Is A Happy Day #每个单词的首字母大写
  7. swapcase()----> TODAY IS A hAPPY DAY #大写改成小写,小写改成大写

2.分割、组合和移除

函数名作用
split()通过指定分隔符对字符串进行分割,有两个可选参数,第一个参数为分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。第二个参数为最大分割次数,默认为 -1,即不限次数。
join()用于将序列中的元素以指定的字符连接生成一个新的字符串。join() 方法接收一个序列(列表、元组、字符串等)作为参数,. 前面的字符串用于连接符。
strip()用于移除字符串开头和结尾指定的字符(默认为空字符)或字符序列。当传入一个字符串时,会将传入字符串中每个字符依次移除。

①split()

该函数返回值是列表类型。当有连续的空格时,只分隔第一个空格,其余的空格作为单独的字符串输出在列表里。

  1. str1 = " \n冰\t淇 淋-加 点 糖 "
  2. print("原字符串如下:",str1)
  3. print("split()---->",str1.split())#以空格、换行(\n)、制表符(\t)等分隔
  4. print("split(' ')---->",str1.split(' '))#以空格分隔,且开头和结尾的空格无法去除
  5. print("split('-')---->",str1.split("-"))#以"-"分隔,该例子中将其分隔为两个字符串,其他部分保留输出
  6. str2 = "冰淇淋加点糖"
  7. print(str2.split("加点")) #可以以某几个字作为切割点
  8. str3 = "冰 淇 淋 加 点 糖"
  9. print(str3.split(" ",3))#3为最大分割次数,表示分隔3个空格
  10. str4 = "冰 淇 淋 加 点 糖"
  11. print(str4.split(" ",3))#连续的空格,只分隔第一个,其余作为字符
'
运行
  1. 结果:
  2. 原字符串如下:
  3. 冰 淇 淋-加 点 糖
  4. split()----> ['冰', '淇', '淋-加', '点', '糖']
  5. split(' ')----> ['', '\n冰\t淇', '淋-加', '点', '糖', '']
  6. split('-')----> [' \n冰\t淇 淋', '加 点 糖 ']
  7. ['冰淇淋', '糖']
  8. ['冰', '淇', '淋', '加 点 糖']
  9. ['冰', '', '', '淇 淋 加 点 糖']

②join()

“x”.join(str)表示将x插入到str字符串中间,该函数返回的是字符串类型。

  1. str1 = "冰淇淋加点糖"
  2. print("-".join(str1))#输出:冰-淇-淋-加-点-糖
  3. print(" ".join(str1))#输出:冰 淇 淋 加 点 糖
  4. list1 = ["冰","淇","淋","加","点","糖"]
  5. print("$".join(list1))#输出:冰$淇$淋$加$点$糖
  6. print("".join(list1))#输出:冰淇淋加点糖
  7. tuple1 = ("冰","淇","淋","加","点","糖")
  8. print("*".join(tuple1))#输出:冰*淇*淋*加*点*糖
  9. print("".join(tuple1))#输出:冰淇淋加点糖
'
运行

③strip()

该函数返回的是字符串类型。

  1. str1 = "!!!冰-淇-淋-加-点-糖!!!"
  2. print(str1.strip("!"))#输出:冰-淇-淋-加-点-糖
  3. str2 = "!$!$!冰-淇-淋-加-点-糖!!!"
  4. # 当传入的是一个字符串时,会依次删除该字符串中出现的符号
  5. print(str2.strip("!$"))#输出:冰-淇-淋-加-点-糖
  6. print(str2.strip("$!"))#输出:冰-淇-淋-加-点-糖
  7. str3 = "\n 冰-淇-淋-加-点-糖\n \t"
  8. print(str3.strip())#删除空格、换行(\n)、制表符(\t)等开头或结尾的符号
  9. #输出:冰-淇-淋-加-点-糖
'
运行

3.统计、定位与替换

函数名作用
count()用于统计字符串中某个子串出现的次数。第一个参数为要统计次数的字符串,后两个可选参数为在字符串搜索的开始与结束索引。
find()查找子串str第一次出现的位置,如果找到则返回相应的索引,否则返回-1
index()

查找子串str第一次出现的位置,如果找到则返回相应的索引,否则报错

replace()用于将字符串中的指定字符串替换成别的字符串。第一个参数为被替换字符串,第二个参数为替换字符串,第三个可选参数为替换的最多次数,默认为无限次。

代码举例:

  1. str1 = "冰冰冰淇淋加点糖糖"
  2. print(str1.count("糖"))#输出:2
  3. print(str1.count("冰"))#输出:3
  4. print(str1.count("冰冰"))#输出:1
  5. print(str1.index("糖")) #输出:7
  6. print(str1.find("唐"))#输出:-1
  7. print(str1.find("糖"))#输出:7
  8. print(str1.find("冰",3))#输出:-1。从索引为3开始向后查找字符”冰“,即从“淇淋加点糖糖”查找字符”冰“,查不到返回-1
  9. print(str1.find("冰",1,3))#输出:1.从索引为2开始向后查找字符”冰“,到索引为3结束查找。第一个出现的“冰”索引为1
  10. # print(str1.index("唐"))#输出:Traceback (most recent call last):ValueError: substring not found
  11. print(str1.replace("糖","棒棒糖"))#输出:冰冰冰淇淋加点棒棒糖棒棒糖
  12. print(str1.replace("糖","棒棒糖",1))#输出:冰冰冰淇淋加点棒棒糖糖(将糖改为棒棒糖且只改一次)
'
运行

4.判断字符串是否以某个字符开头或者结尾

函数名作用
startswith(str)判断某个字符串是否以str开头,返回布尔值
endswith(str)判断某个字符串是否以str结尾,返回布尔值

代码举例:

  1. str1 = "冰淇淋加点糖"
  2. print(str1.startswith("冰"))#输出:True
  3. print(str1.endswith("糖"))#输出:True
'
运行

四、format格式化输出方法

字符串的特性中讲述了“%()”的格式化输出方法,还有一种比较好用的格式化方法是format。

1.format()的字符串格式化方法

format方法可以用"{}"作为占位符,用于格式化输出,类似一个萝卜一个坑的思想,如果没有编号,则format里面数据的依次占位{}

  1. print('我叫{},今年 {} 岁,来自{}'.format('冰淇淋加点糖', 18, '安徽'))# 我叫冰淇淋加点糖,今年 18 岁,来自安徽
  2. print('我叫{0},今年 {1} 岁,来自{2}'.format('冰淇淋加点糖', 18, '安徽'))# 我叫冰淇淋加点糖,今年 18 岁,来自安徽
  3. print('我叫{2},今年 {1} 岁,来自{0}'.format( '安徽', 18,'冰淇淋加点糖'))# 我叫冰淇淋加点糖,今年 18 岁,来自安徽
  4. print('我叫{name},今年 {age} 岁,来自{province}'.format(name='冰淇淋加点糖', age=18, province='安徽'))# 我叫冰淇淋加点糖,今年 18 岁,来自安徽
  5. print('我叫{name},今年 {age} 岁,来自{province}'.format(name='冰淇淋加点糖',province='安徽', age=18,))# 我叫冰淇淋加点糖,今年 18 岁,来自安徽
'
运行

2.format()的格式控制

format()方法的占位符除了可以包括参数序号,还可以包括格式控制信息,语法格式如下:

{<参数序号>:<格式控制标记>}

<填充><对齐><宽度><,><.精度><类型>
引导符号用于填充的单个字符

< 左对齐

> 右对齐

^ 居中对齐

占位符的设定输出宽度数字的千分位分隔符,适用于整数和浮点数浮点数小数部分的精度或字符串的最大输出长度

整数类型

b,c,d,o,x,X

浮点数类型

e,E,F,%

Ⅰ.填充,对齐,宽度字段的使用示例

格式控制符可以用变量来表示,用占位符对应控制标记及数量

  1. str1 = "冰淇淋加点糖"
  2. # (左对齐,宽度1)宽度小于实际长度,原样输出
  3. print("{:<1}".format(str1))#输出:冰淇淋加点糖
  4. # (右对齐,宽度25)
  5. print("{:>25}".format(str1))#输出: 冰淇淋加点糖
  6. # (填充$,左对齐,宽度25)
  7. print("{:$<25}".format(str1))#输出:冰淇淋加点糖$$$$$$$$$$$$$$$$$$$
  8. # (居中对齐,宽度25)
  9. print("{:^25}".format(str1))#输出: 冰淇淋加点糖
  10. # (填充$,居中对齐,宽度25)
  11. print("{:$^25}".format(str1))#输出:$$$$$$$$$冰淇淋加点糖$$$$$$$$$$
  12. str2 = "冰淇淋加点糖"
  13. tianchong = "*"
  14. duqi = "^"
  15. width = 25
  16. print("{0:{1}{2}{3}}".format(str2,tianchong,duqi,width))#输出:*********冰淇淋加点糖**********
'
运行

Ⅱ.千分号,精度,类型的使用示例

  1. # 千分号
  2. print("{:$^25,}".format(12345678))#输出:$$$$$$$12,345,678$$$$$$$$
  3. print("{:$^25}".format(12345678))#输出:$$$$$$$$12345678$$$$$$$$$
  4. # 浮点数
  5. print("{:$^25,.2f}".format(12345.678))#输出:$$$$$$$$12,345.68$$$$$$$$
  6. print("{:>25.3f}".format(12345.6789))#输出: 12345.679
  7. # 字符串的精度是去前n个字符
  8. print("{:.3}".format("冰淇淋加点糖"))#输出:冰淇淋
  9. print("{:>25.15}".format("冰淇淋加点糖"))#输出: 冰淇淋加点糖
  10. # 4的二进制表示
  11. print("{:b}".format(4))#输出:100
  12. # 173的八进制表示(173辗转相除8得八进制)
  13. print("{:o}".format(173))#输出:255
  14. # 15的十六进制小写表示
  15. print("{:x}".format(15))#输出:f
  16. # 15的十六进制大写写表示
  17. print("{:X}".format(15))#输出:F
  18. # %百分比形式
  19. print("{:.2%}".format(0.56894))#输出56.89%
  20. # 五舍六入
  21. print("{:.2%}".format(0.56896))#输出56.89%
  22. # 科学计数法表示
  23. # 小写e表示
  24. print("{:e}".format(0.56987))#输出:5.698700e-01
  25. print("{:e}".format(123456789))#输出:1.234568e+08
  26. # 大写E表示
  27. print("{:E}".format(0.56987))#输出:5.698700E-01
  28. print("{:E}".format(123456789))#输出:1.234568E+08
'
运行

五、总结

字符串的操作与列表类似,同时具有列表的性质和元组的不可变性。字符串的常用函数和format函数需重点掌握。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/917952
推荐阅读
相关标签
  

闽ICP备14008679号