python数据结构之一字符串

字符串

1.常用操作

  • 原始字符串

需要注意的是我们通常会使用转义符去实现一些字符串换行等操作,我们在数据分析的时候经常使用原字符串方法,下面介绍使用原字符串的方法,看下面的例子:

>>> print('www.csdn.com\n','大佬云集')
www.dotcpp.com
 大佬云集
>>> print(r'www.csdn.com\n','大佬云集')
www.csdn.com\n 大佬云集

第一行代码中的‘\n’在输出的时候被实现,因此实现了换行操作。

第二行代码输出的字符串前有‘r’,因此在输出的时候只会输出原始字符串,无论字符串中包含什么转义符,都不会被实现。

  • 访问字符串

我们经常会使用循环来遍历字符串以访问每个字符,而且我们通常会使用for循环和索引来访问。

使用for循环来遍历字符串的格式为:

for i in my_str

来看个例子

>>> my_str = 'www.csdn.com'
>>> for i in my_str:
...     print(i,end=' ')
...
w w w . c s d n . c o m

我们也可以使用range(len(str))结构,在这里再次解释一下,range()是一个对象,而len()是求长度,len(my_str)求出了字符串的长度,然后range(len(my_str))的对象就是0到字符串的最大长度减1。我们可以随意取几个元素:

>>> my_str
'www.csdn.com'
>>> my_str[5]#索引值为5的字符
's'
>>> my_str[0]#索引值为0的字符,也就是第一个字符
'w'
>>> my_str[len(my_str)-1]#索引值为最后一位的字符
'm'
>>> my_str[-1]#这种方式也是访问最后一个字符
'm'

在使用字符串的时候合理的使用len()函数能够优化我们的代码。

  • 拼接字符串

字符串自带拼接方法,我们可以使用'+'来连接两个字符串,看下面的例子。

>>> my_str
'www.csdn.com'
>>> his_str = '人生苦短,我用Python'
>>> my_str + his_str
'www.csdn.com人生苦短,我用Python'

通过‘+’可以直接进行字符串的连接,连接之后生成的是一个新的字符串,原字符串并没有发生改变。

  • 字符串切片

我们在列表的使用过程中多次使用到切片,字符串同样可以使用切片表达式来获取字符串中的部分字符,同时我们可以通过切片的方式直接进行字符串的逆置。

看下面的例子:

>>> my_str                   
'www.csdn.com'
>>> my_str[0:2]#通过切片访问0-1
'ww'
>>> my_str[3:6]#3-5
'.cs'
>>> my_str[7:10]#7-9
'n.c'
>>> my_str[::2]#步长为2的访问整个字符串
'wwcd.o'
>>> my_str[::-1]#逆置字符串

'moc.ndsc.www'

2.常用方法

  • count()方法

定义:统计字符串中某个字符的个数例如字符串my_str,x是其中的1个字符

语法结构:my_str.count(x)

看下面的例子

>>> my_str
'www.csdn.com'
>>> my_str.count('w')
3
>>> my_str.count('.')
2
>>> my_str.count('c')
1
>>> my_str.count('*')
0

  • find()方法

定义:用来判断字符串中是否存在指定元素,如果包含该元素,返回第一次出现索引的位置,如果不包含该元素,返回-1。

语法结构:my_str.find(x)

看下面的例子

>>> my_str
'www.csdn.com'
>>> my_str.find('w')#寻找字符w
0
>>> my_str.find('c')#寻找字符p
4
>>> my_str.find('m')#寻找字符m
11
>>> my_str.find('*')#寻找字符*,因为*不存在因而返回-1
-1

我们同样可以采用关键字in来查询指定字符是否存在于指定字符串中,如果字符串中存在指定字符则返回True,如果不存在则返回False。看下面的例子

>>> my_str
'www.csdn.com'
>>> 'c' in my_str
True
>>> 'w' in my_str
True
>>> '.' in my_str
True
>>> '*' in my_str
False

  • index()方法

定义:index()方法与find()方法类似,区别是如果字符串不存在指定的元素,会抛出异常。

语法结构:my_str.index(x)

看下面的例子

>>> my_str = 'www.csdn.com'
>>> my_str.index('w')
0
>>> my_str.index('o')
10
>>> my_str.index('*')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

标准格式

my_str.count(x[,start[,end]])
my_str.find(x[,start[,end]])
my_str.index(x[,start[,end]])

注释:[]表示省略符号,start表示起始位置,end表示结束位置,但不包含end。下面看下例子

>>> my_str = 'www.csdn.com'
>>> my_str.index('o',6,13)#在6-12之间寻找o
12
>>> my_str.count('w',0,5)#统计w在0-4之间存在的次数
3
>>> my_str.find('c',3,9)#在3-8之间寻找7
7

3.字符串的测试方法

  • isalnum()方法

isalmum用来判断字符串中是否只包含字母或数字。并且长度要大于0。满足的话返回True或则返回False。

来看个例子:

>>> my_str
'www.csdn.com'
>>> my_str.isalpha()#判断是否只包含字母
False

  • isdigit()方法

isdigit()方法用来判断字符串中是否只含数字,如果是的话返回True,否则返回Flase,再来看个例子:

>>> my_string
'99+1=100'
>>> my_str.isdigit()#判断是否只包含数字
False

  • islower()方法与isupper方法

这两种方法分别用来判断字符串中是否只含小写字母和大写字母,使用方法和上面几种方法一致,我们来举例来看下:

>>> s = 'ABCabc'#字符串s包含大写字母和小写字母

>>> s.islower()

False

>>> s.isupper()

False

>>> s = 'abc'#s字符串只包含小写字母

>>> s.islower()

True

>>> s = 'ABC'#s字符串只包含大写字母

>>> s.isupper()

True

  • isspace()方法

isspace()方法用于判断字符串是否只包含空白字符(空格、换行(\n)和制表符(\t)),并且长度大于0,满件返回True,否则返回False。

看下面的例子

>>> my_str = ' \n \t '#其中包含五个字符,三个空格,一个换行,一个制表符
>>> len(my_str)#看一下长度
5
>>> my_str
' \n \t '
>>> print(my_str)
 
>>> my_str.isspace()#判断是否为空白字符
True

  • 总结

这几个方法的使用比较类似,都是在测试通过之后返回True,而错误则返回False,我们通常会使用if语句结合使用,当if语句成立之后,即判断字符串中所包含内容成立之后再执行相关语句,如果判断为False则执行另外语句。

4.字符串修改、搜索和替换方法

  • lower()方法与upper()方法

这两种方法和上一节的测试方法类似,前者是返回一个副本,副本中把字符串中所有字符转换为了小写字符,而后者是返回一个副本,副本中把字符串中所有字符转换为了大写字符。

        看下面的例子:

>>> my_str = 'ABCabc'#包含大小写字母的字符串

>>> my_str.upper()#将字符串全部大写

'ABCABC'

>>> my_str.lower()#将字符串全部小写

'abcabc'

>>> my_str#再看一下原始字符串有没有改变

'ABCabc'

一定要注意的就是返回的是副本,使用了方法,但是原始字符串是没有改变的,如果我们要获取副本,可以另取名,也可以直接覆盖。

>>> my_str = my_str.upper()#直接覆盖

my_str

>>> my_str

'ABCABC'

  • lstrip()方法、rstrip ()方法和strip()方法

这三种方法的原理类型,他们都是用于处理字符串中的空白字符。

 

1) lstrip()方法会返回一个副本,副本中的字符串删除所有前导的空白字符。

 

2) rstrip()方法会返回一个副本,副本中的字符串删除所有后导的空白字符

 

3) strip()方法会返回一个副本,副本中的字符串删除所有前导和后导的空白字符。

        我们来看下代码:

>>> my_str = ' \n\t www.csdn.com \t\n  '
>>> my_str.rstrip()#返回删除后导空白字符的副本
' \n\t  
>>> my_str.lstrip()#返回删除前导空白字符的副本
'www.csdn.com \t\n  '
>>> my_str.strip()#返回删除前导后导空白字符的副本
'www.csdn.com'

  • 搜索方法

我们在写程序的时候有时候需要搜索字符串中的元素,除了前面讲过的find()方法和index()方法,我们有时候还需要用到endswith()方法和startswith()方法。

  • endswith()方法

它的语法格式为:它的语法格式为:

my_str.endswith(substring)

my_str为字符串名,substring参数是一个字符串,如果在该字符串的结尾为substing,那么返回True,反之返回False。

  • startswith()方法

它的语法格式为:

my_str.startswith(substring)

my_str为字符串名,substring参数是一个字符串,如果在该字符串的开头为substing,那么返回True,反之返回False。

举个例子:

>>> my_str = 'www.dotcpp.com' 
>>> my_str.endswith('.com')
True
>>> my_str.startswith('www.')
True

  • 替换方法——replace()

replace()方法返回一个副本,副本中将我们需要替代的字符替换掉,它的语法格式为:

my_str.replace(old,new)

>>> my_str = 'www.csdn.com'
>>> my_str.replace('w','m')
'mmm.csdn.com'

这种方法替换的时候仍然是返回的副本,它会替换掉所有需要替换的字符,保持原字符串是不改变的。

5.格式化字符串

在学习字符串的过程中,我们在前面讲了很多使用方法,实际在使用的过程中,我们经常会需要将字符串格式化,通过格式化输出我们需要的结果。

  • format方法

format()方法提供了更多的方法去格式化字符串,它的基本语法是通过‘{}’和‘:’来代替‘%’。它的语法格式为:

str.format()

我们通过例子来看一下:

namea = '小明'
nameb = '小华'
print('{}是{}的好朋友'.format(namea,nameb))

这个例子是最简单的使用方式,但是既然这个方法是后来引入的方法,那么它一定有它比较好用的地方,下面我们介绍一下它的具体方法。

在占位符里结构可以为:

{[index[:[fill]align][width][#][.k][type]]}

通过图来看一下这个结构:

d6ea6422311c49c5baa9485c16ab1abb.png

在上面那个例子中只包含了简单的‘{}’,如果我们加以修饰的话可以使用上面的这些结构,我们来一一说明:

1) index为索引位置,我们可以给他一个数字,用来指定对象在列表中的索引位置,索引值从0开始,如果没有索引值,按从左到右的顺序。像上面的例子,我们如果加了索引值:

namea = '小明'
nameb = '小华'
print('{1}是{0}的好朋友'.format(namea,nameb))

那么他们的位置就进行了一个调换。

2) ‘:’为后续内容使用的前提,使用后面操作的时候都要加一个‘:’。

3) fill可以选择一个参数作为空白填充的字符数。

4) width是可以选择一个参数来指定长度。

5) align可以选择一个参数作为对齐方式,参数为‘>’代表右对齐,‘<’为左对齐,‘=’为右对齐,但是符号放在最左侧,‘^’代表居中,这些需要搭配width使用。

我们看个例子:

>>> my_str = 'csdn'
>>> print('{:@>8}'.format(my_str))
@@@@csdn

这个例子里我们选择了右对齐,然后宽度为8,空白字符用符号@代替。

6) ‘#’为进制前缀。

7) .k中的k是可选参数,用来表示小数点后保留的数字。

8) type可选择参数来指定类型,常用的有S来表示字符串、D来表示十进制整数、%来表示百分比、f或者F表示浮点数。

下面我们在通过一个例子来使用一下上述这些方法。

my_str = 'csdn'#先定义两个字符串
my_string = 123456.654321
print('my_str:{1:!^20s}\nmystring:{0:$^20.2f}'.format(my_string,my_str))

输出为:

my_str:!!!!!!!!csdn!!!!!!!!
mystring:$$$$$123456.65$$$$$$

对于my_str,‘1‘为它的索引位置,‘!’来替代空白字符,‘^’代表位置居中,20为宽度,‘s’为字符串类型。

对于my_string,‘0’位它的索引位置,‘$’来代替空包字符,‘^’代表位置居中,20位宽度,‘.2’为小数点后保留2位小数,‘f’为浮点类型。

6.字符串与列表的相互转换

假如给定一个字符串city ="上海 哈尔滨 天津 呼和浩特",需要只道有多少个城市,怎么操作?可以把字符串转换为列表然后求出长度即可,需要用到split()函数,看下面的例子。

cities ="上海 哈尔滨 天津 呼和浩特"

ret1 = cities.split(" ")

print(len(ret1))

输出结果为:

4

注意split("分隔符")里的分隔符是空格,字符串里的分隔符应与split("分隔符")里的一致。如果把列表再转换为字符串呢,可以用 "分隔符".join( ) 格式进行转换,看下面的例子。

ret2 =";".join(ret1)

print(ret2)

输出结果为

上海;哈尔滨;天津;呼和浩特

7.总结

关于字符串就讲到这里,字符串的使用是十分频繁的,所以大家一定要通过习题去练习并掌握它。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值