数据类型详解之字符串

本文详细介绍了Python中的字符串数据类型,包括转义字符的使用,如 、 、 等,字符串的连接与重复操作,切片功能,以及字符串的格式化方法。特别强调了字符串查找相关函数的重要性,并提到了str.splitlines()函数,用于将字符串按行分割成列表。作业部分要求统计输入字符中字母、空格、数字和特殊符号的数量,涉及ASCII码转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型详解-字符串

1.转义字符

一个普通的字符出现在转义符 \ 的后面时,实现了另外一种意义

  • \ 转义符,续行符。

    作为续行符时,在行尾使用了\后,可以换行继续书写内容;

    a = '123'\
        '12'
    print(a)
    >>>12312
    

    作为转义符时,在\后面出现的字符可能会实现另外一种意义:

  • \n 换行符

    a = '123\n12'
    print(a)
    >>>123
       12
    
  • \r 代表光标位置(从\r出现的位置开始作为光标的起点)

    a = '123\r45'
    print(a)
    >>>45
    
  • \t 代表一个水平制表符(table 缩进)

    a = '123\t45'
    print(a)
    >>>123 45
    
  • \b 退格符

    a = '123\b45'
    print(a)
    >>>1245
    
  • \\ 反转义\,输出了\,取消\的转义效果

    a = '123\\n45'
    print(a)
    >>>123\n45
    

把转义字符作为普通字符输出,在字符串的前面加 r

a = r'123\n45'
print(a)
>>>123\n45

2.字符串相关的操作

字符串的索引操作,字符串中只能使用[]下标访问,不能修改
  • 字符串 + 操作:‘a’ + ‘b’ >>> ‘ab’

  • 字符串 * 操作:‘a’ * 5 >>>‘aaaaa’

  • 字符串 [] 切片

    • str[开始值:结束值:步进值]
      开始值:默认为0,结束值默认是最后一个下标,步进值默认为1
    a = '0123456789'
    
    print(a[5])
    >>>5
    print(a[-4])   #没有倒数第0个这种说法,倒数第1个就是倒数第1个
    >>>6
    print(a[5:])
    >>>56789
    print(a[-4::])
    >>>6789
    print(a[0:3])       #遵循左闭右开,取不到下标为3的值
    >>>123
    print(a[0:5:2])     #从0到下标4,隔1个取一个
    >>>024
    print(a[::-1])      #反转字符串
    >>>9876543210
    print(a[::-3])      #反转字符串,隔两个取一个
    >>>9630
    print(a[1::3])      #从下标1开始,隔两个取一个
    >>>147
    【注意!!反转之后的开始值也要从索引大的往索引小的取!】
    print(a[1:5:-1])
    【此时输出为空】
    print(a[5:1:-1])    #这样写才是正确的!
    >>>5432
    

3.字符串格式化的方法

  • format

    a = '1'
    b = 'a'
    print('{}234,{}'.format(a,'cc'))  #1.普通方式
    >>>1234,cc
    print('{n}234,{c}'.format(n=a,c='cc'))  #2.关键字传参
    >>>1234,cc
    print('{1}234,{0}'.format(a,b))   #3.通过索引传参
    >>>a234,1
    
    a = 'A:{} ,B:{} ,C:{} '.format('1',[2],['3'])   
    print(a)        #注意这里的输入和输出
    >>>A:1 ,B:[2] ,C:['3'] 
    
    a = 'A:{0[1]} ,B:{0[2]} ,C:{0[0]} '.format(['1','2','3'])
    print(a)      #这里0[1]的0指的是format里下标为0的容器类型数据
    >>>A:2 ,B:3 ,C:1
                
    tmp = {'a':'11','b':'22'}
    a = '{a},{b}'.format(**tmp)
    print(a)
    >>>11,22
    #这里的a还可以写成
    a = '{a},{b}'.format(a = tmp["a"],b = tmp['b'])
    >>>11,22
    【注意!format()里可以不用管引号嵌套问题,tmp["a"]和tmp['b']都可以拿到字典里的键,但是f''里就必须要注意引号嵌套!
    
  • f python3新增方法

    tmp = {'a':'11','b':'22'}
    a = f'{tmp["a"]}345'
    print(a)
    >>>11345
    #这里如果是f'{tmp['a']}345'就会报错
    
    a = 12.356478
    print('{:.2f}'.format(a))   #限定小数的位数
    >>>12.36
    

4.字符串相关函数

4.1大小写转换函数与字符检测相关函数

#大小写转换相关函数
vars = 'iloveyou'

# 把字符串的首个字符大写,其余小写。
res = vars.capitalize()
# 把字符串中的每个单词的首字母大写
res = vars.title()
# 把字符串中的英文字母全部转为大写
res = vars.upper()
# 把字符串中的英文字母全部改为小写
res = vars.lower()
# 字符串中的大小写字符转换,大写转小写,小写转大写
res = vars.swapcase()
#字符检测相关函数
str = 'iloveyou'
# 检测字符串中的英文字符否全部由大写字符组成
res = str.isupper()
# 检测字符串中的英文字符否全部由小写字符组成
res = str.islower()
# 检测字符串中的英文单词部分是否符合title:是否每个单词首字母都大写
res = str.istitle()
#检测字符串是否全部由字符(中文,英文字符,数字)组成:【有空格就是False】
res = str.isalnum()
# 检测当前的字符串是否由中英文字符组成(不包含数字和其它字符)
res = str.isalpha()
# 检测当前的字符串是否由只数字字符组成
res = str.isdigit()
【注意和str.isnumeric()的区别】
# 检测当前的字符串是否由指空格字符组成
res = str.isspace()
# 检测字符串是否以指定的字符开始的,也可以指定开始和结束的位置
str = 'iloveyou'
res1 = str.startswith('ilov')
res2 = str.startswith('y')
res3 = vars.startswith('l',1)
print(res1)
print(res2)
print(res3)
>>>True
   False
   True
    
# 检测字符串是否以指定的字符结束的,也可以指定开始和结束的位置
str = 'iloveyou'
res1 = str.endswith('you')
res2 = vars.endswith('y')
res3 = vars.endswith('love',0,5)  #左闭右开,从0开始,下标4为结束
res4 = vars.endswith('e',1,5)
print(res1)
print(res2)
print(res3)
print(res4)
>>>True
   False
   True
   True  

4.2 【重点】字符串查找相关函数

#检测一个字符串是否存在于一个字符串中
print('a' in str) #在就是True,不在就是False
#获取字符串长度
len()函数

#获取指定字符在字符串中第一次出现的索引位置,未找到则返回 -1
str.find(sub[, start[, end]]) #从左向右找
#find()把输入的参数看作一个整体

a = 'cxyabcdefcxy'
res = a.find('xy')
print(res)
>>>1             #获取【第一次出现】的【索引】
res1 = a.find('xy',5,12)   #开始位置为5,结束位置为下标11
res2 = a.find('xy',5,11)
res3 = a.find('x',10,11)
res4 = a.find('x',5,10)    #x下标为10,此时返回为-1
print(res1,res2,res3,res4)
>>>10  -1  10  -1

str.rfind(sub[, start[, end]]) #从右向左找

a = 'cxyabcdefcxy'
res = a.rfind('xy')
print(res)
>>>10
#开始结束位置的用法和find一样
str.index(),和str.find()一样,只不过未找到则报错
str.rindex(),和str.rfind()一样,未找到则报错
str.count(sub[, start[, end]])
#统计一个字符在字符串中出现的字符

a = 'cxyabcdefcxy'
res = a.count('x')
print(res)
>>>2

4.3 【重点】字符串操作相关函数

【补充!还有一个,加在最前面好了】

【str.splitlines()】,返回值的类型为【列表】

str.splitlines() #按照\n分隔
等于str.split('\n')
【不不不,不完全等于】
#括号里默认为False,就是按照行分隔,如果为str.splitlines(True)则保留换行符

a = ' 123 \n 456 \n 789\n'
b = a.splitlines()
print(b)
c = a.split('\n')
print(c)
>>>[' 123 ', ' 456 ', ' 789']
   [' 123 ', ' 456 ', ' 789', '']  
#注意这里的不同!    

#如果字符串不是以\n结尾的,那么这两个函数的输出就是一样的
a = ' 123 \n 456 \n 789'
b = a.splitlines()
print(b)
c = a.split('\n')
print(c)
>>>[' 123 ', ' 456 ', ' 789']
   [' 123 ', ' 456 ', ' 789']
str.split() #按照指定的分隔符,把字符串分隔成【列表】

a = 'cxy_abc_def_cxy'
res = a.split('_')
print(res)
>>>['cxy', 'abc', 'def', 'cxy']

a = 'cxy=123*abc=345*def=cxy'
res = a.split('*')
print(res)
for i in res:
    print(i.split('='))
    a = i.split('=')
    print(a[0])
    print(a.pop())
>>>['cxy=123', 'abc=345', 'def=cxy']
   ['cxy', '123']
   cxy
   123
   ['abc', '345']
   abc
   345
   ['def', 'cxy']
   def
   cxy
    
a = 'cxy=123*abc=345*def=cxy'
res = a.split('*',1)         #可以指定分割的次数
print(res)
>>>['cxy=123', 'abc=345*def=cxy']


str.rsplit()  #从右向左进行,从后向前

a = 'cxy=123*abc=345*def=cxy'
res = a.rsplit('*',1)        #从右向左,分割1次
print(res)
>>>['cxy=123*abc=345', 'def=cxy']
'指定字符'.join(str) #按照指定的字符,把容器类型中的数据链接成一个【字符串】

a = ['cxy', 'abc', 'def', 'cxy']
res = '='.join(a)
print(res)
>>>cxy=abc=def=cxy
str.strip()   #可以去除字符串【左右两侧】的指定字符
#strip()和find()不一样,不是把传入参数看作整体,而是看作字符串,只要是在里面的,都删
a = '###cxyis##cxy##'
res = a.strip('#')  
print(res)
>>>cxyis##cxy

a = '###cxyis##cxy##'
res = a.strip('#c123')
print(res)
>>>xyis##cxy

str.lstrip() 去除字符串左侧的指定字符
str.rstrip() 去除字符串右侧的指定字符
str.replace(old,new[,count])  #把所有的子字符串old替换成new,如果出现了参数count,就只替换前count次

a = 'cxyiscxy'
res = a.replace('cxy','xka')
res1 = a.replace('cxy','xka',1)
print(res,res1)
>>>xkaisxka  xkaiscxy
str.center()

a = 'cxy'
res = a.center(10)
res1 = a.center(10,'*')
print(res)
print(res1)
>>>   cxy    
   ***cxy****
    
res = a.ljust(10)
res1 = a.rjust(10,'*')
print(res)
print(res1)
>>>cxy       
   *******cxy

补充

encode() #以指定的编码格式编码字符串

str = '陈心怡'
print(str.encode('UTF-8'))
>>>b'\xe9\x99\x88\xe5\xbf\x83\xe6\x80\xa1'
str.isnumeric()  #检查字符串是否只由数字字符组成
#和 str.isdigit()的区别:
str.isnumeric()里的数字包括:Unicode 数字,全角数字(双字节),罗马数字,汉字数字。
str = '123一二三'
print(str.isdigit())
print(str.isnumeric())
>>>False
   True
max(str) #返回字符串中最大的字符
str = 'zcxy'
print(max(str))
>>>z

min(str) #返回字符串中最小的字符
str = 'zacxy'
print(min(str))
>>>a

作业

输入一行字符,分别统计出其中英文字母、空格、数字和特殊符号的个数。

【注意!!这道题需要把字符转换为ASCII码!!!】

n = input('请输入字符串:')
a= 0
b= 0
c= 0
d= 0
if n.isalpha():
    print('英文字母的个数为',len(n))
elif n.isspace():
    print('空格的个数为',len(n))
elif n.isdigit():
    print('数字的个数为',len(n))
else:              
    for i in n:
        if ord(i) in range(65,91) or ord(i) in range(97,123):
           a += 1
        elif i is ' ':
           b += 1
        elif ord(i) in range(48,58):
           c += 1
        else:
           d += 1
    print('英文字母的个数为:',a, '空格的个数为:',b, '数字的个数为:',c, '特殊字符的个数为:',d)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值