Loading

字符串

字符串的表示方式

python里,可以使用一对单引号,一对双引号或者一对三个单引号,一对三个上引号

a = 'hello'
b = "good"
c = '''呵呵呵'''
d = """嘿嘿嘿"""

如果字符串里有单引号,外面可以用双引号

e = '小明说:"你好"'
f = "I'm xiaoming"
g = """xiaoming said:"I am xiaoming" """

字符串里的转义字符\

 # \' ==>表示一个普通的单引号
 h = 'I\'m xiaoming' # \ 表示的是转义字符,作用是对\后面的字符进行转义
 # result: I'm xiaoming

# \" ==>表示一个普通的双引号     
i = "xiaoming said:\"I am xiaoming\""
# result: xiaoming said:"I am xiaoming"

#  \n ==>表示一个换行
j = "hello \n world"
# result: 
hello 
 world

# \t ==>表示一个制表符
k = "你好\t世界"
# result: 你好    世界

# \\ ==>表示一个普通的反斜线
l = "good mor\\ning"
# result: good mor\ning

# 在字符串的前面添加`r`在python里面表示原生的字符串
m = r"hello \teacher"
# result: hello \teacher

下标

下标又称之为索引,表示第几个数字。

str list tuple可以通过下标来获取或者操作数据

在计算机里,下标都是从0开始的。

word='zhangsan'
# 可以通过下标来获取或者修改指定位置的数据
print(word[4])
# result: g

字符串是不可改变的数据类型,对于字符串的任何操作,都不会改变原有的字符串

切片

切片就是从字符串里赋值一段指定的内容,生成一个新的字符串,原字符串的数据不变

切片语法:m[start : end:step],start开始位置,end结束位置的前一位。step步长,可以理解为间隔,step为正数从左往右复制数据,step为负数从右往左复制数据。

m = 'abcdefghijklmnopqistuvwsyz'
# 包含start,不包含end
print(m[2:9])
# result: cdefghi

# 如果只设置了start,会截取到最后
print(m[2:])
# resutl: cdefghijklmnopqistuvwsyz 

# 如果只设置了end,会从头开始截取
print(m[:9])
# result: abcdefghi

# 步长默认为1,不能为0为零时报错
print(m[3:15:1])
# resutl: defghijklmno

# 每间隔步长取一次数据
print(m[3:15:2]) 
# result: dfhjln

# 步长可以是负数,表示从右往左
print(m[15:3:-1]) 
# result: ponmlkjihgfe

# 从头到尾复制一份
print(m[::]) 
# result: abcdefghijklmnopqistuvwsyz

# 倒序
print(m[::-1])
# result: zyswvutsiqponmlkjihgfedcba

print(m[-9:-5:])  
# result: istu 

字符串常见操作

x = 'abcdefghijklmn'

# 获取字符串长度
print(len(x))
# result: 14

# 查找内容相关的方法 find/index/rfind/rindex,可以获取指定字符的下标
print(x.find('l'))
# result: 11

print(x.index('l'))
# result: 11

# 如果字符在字符串里不存在返回-1
print(x.find('p'))  
# result: -1

# 使用index,如果字符不存在,会报错
# print(x.index('p'))
# result:  
'''
    Traceback (most recent call last):
  File "c:\\Users\\edz\\Desktop\Demo.py", line 8, in <module>
    print(x.index('p'))
    ValueError: substring not found
'''

# 从第四个开始查找l,一直查找到第九个,l下标为11,没有查询到返回-1
print(x.find('l',4,9))
# result: -1


# rfind和rindex用法与find和index相同,区别在于他们会查找下标最大的那个
m = 'abcdefghijklmnl'
print(m.rfind('l'))
# result: 14
print(m.rindex('l'))
# result: 14

字符串判断

startswith,endweith,isalpha,isdigit,isalnum,isspace

# is开头的是判断,结果是一个布尔类型
# 判断hello,结果是一h开头的字符串
print('hello'.startswith('h'))
# result: True

# 以o结尾
print('hello'.endswith('o'))
# result: True

# 是否只有字母组成
print('he45llo'.isalpha())  # False

# 是否只有数字组成
print('good'.isdigit()) # False
print('123'.isdigit()) # True
print('3.14'.isdigit()) # False

# 是否字母和数字组成
print('abce123'.isalnum()) # True
print('abc'.isalnum()) # True
print('1234'.isalnum()) # True
print('4-1=3'.isalnum()) # False

# 是否全部由空格组成
print('   '.isspace()) # True
print('  sdf sdf  '.isspace()) # False

count

返回strstartend之间在mystr里面出现的次数

语法格式

mystr.count(sub[,start[,end]])-->int

示例

mystr='今天天气好晴朗,处处好风光呀好风光'
print(mystr.count('好')) # 3

替换

replace方法

# replace方法:用来替换
word = 'hello'
m =word.replace('l','x') # replace将字符串里的l替换成x
print(word) # hello   字符串是不可变数据类型
print(m) # hexxo  原来的字符串不会改变,而生成一个新的字符串来保存替换后的结果

内容分割

aplit,rsplit,splitlines,partition,rpartition

使用split方法,以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+1 个子字符串

print(x.split(','))  # ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'jack', 'tony']
print(x.split(',', 2))  # ['zhangsan', 'lisi', 'wangwu,jerry,henry,merry,jack,tony']
# rsplit方法,从右边开始分割 
print(x.rsplit(',', 2))  # ['zhangsan,lisi,wangwu,jerry,henry,merry', 'jack', 'tony']

# 将列表转换为字符串。join方法后面是可迭代对象
fruits=['apple','pear','peach','banana','orange','grape']
print('-'.join(fruits)) # apple-pear-peach-banana-orange-grape
print('*'.join('Hello')) # H*e*l*l*o

splitlines方法,按照行分割,返回一个包含各行作为元素的列表

x='hello\nworld'
print(x.splitlines()) # ['hello', 'world']

partition方法,把mystrstr分割成三部分,str前,strstr后,三部分组成一个元祖

print('abceefgHijklmn'.partition('H')) # ('abceefg', 'H', 'ijklmn')
print('abceefgHijkHlmn'.rpartition('H')) # ('abceefgHijk', 'H', 'lmn')

# 例如想要获取文件的文件名称和后缀名
file_name='2020.02.21拍摄的视频.mp4'
print(file_name.rpartition('.')) # ('2020.02.21拍摄的视频', '.', 'mp4')

修改大小写

# capitalize 让第一个单词首字母大写
print('hello world '.capitalize()) # Hello world

# title 每个单词的首字母大写
print('good morning'.title()) # Good Morning

# upper 字符串全部改为大写
print('hello world'.upper()) # HELLO WORLD

# lower 字符串全部改为小写
print('HELLO World'.lower()) # hello world

填充补齐

# 让字符串以指定的长度显示,如果长度不够,默认在右边使用空格补齐
print('Hello'.ljust(10),'World',sep='') # Hello     World
print('Hello'.ljust(10,'x'),'World',sep='') # HelloxxxxxWorld

# 左侧补齐
print('Tuesday'.rjust(12, '*')) # *****Tuesday

# 字符串在中间,两侧补齐长度
print('apple'.center(20,'*')) # *******apple********

去除空格

# 去除左边空的
print('      Hello      '.lstrip(),'World',sep='') # Hello      World

# 去除右边空格
print('     Hello     '.rstrip(),'World',sep='') #      HelloWorld

# 去除两边的空格
print('     Hello     World     '.strip(),'123',sep='') # Hello     World123

# 去除所有的空格
print('     Hello     World     '.replace(' ', '')) # HelloWorld

字符串运算

  1. 字符串和字符串之间可以使用加法运算,作用是拼接两个字符串
  2. 字符串和数字之间可以使用乘法运算,目的是将指定的字符串重复多次
  3. 字符串和数字之间做==运算结果是False,做!=运算结果是True
  4. 字符串之间做比较运算,会逐个比较字符串的编码值
  5. 不支持其他的运算符

字符编码

# ord获取字符对应的编码
print(ord('a')) # 97  字符a对应的编码是97
print(ord('你')) # 20320

# chr 根据编码获取对应的字符
print(chr(65)) # A 数字65对应大写字母A

# 字符串转变称为指定的编码集
print('你'.encode('gbk')) # b'\xc4\xe3' 50195

成员运算符

innot in 运算法

# 判断一个内容在可迭代对象里是否存在
word='hello'
x=input('请输入一个字符:')
if x in word:
    print('您输入的内容存在')
else:
    print('您输入的内容不存在')

if x not in word:
    print('不存在')
else:
    print('存在')

格式化打印字符串

name = 'zhangsan'
age=18
print('大家好,我的名字是',name,'我今年',age,'岁了',sep='') # 大家好,我的名字是zhangsan我今年18岁了

在字符串里可以使用 %占位符

  • %s ==> 表示字符串的占位符
  • %d ==> 表示整数的占位符
  • %nd ==> 打印时显示n位,如果不够在前面使用空格补齐
  • %f ==> 表示浮点数的占位符
  • %.nf ==> 保留小数点后n位
  • %x ==> 将数字使用十六进制输出
  • %% ==> 输出一个%
print('大家好,我的名字是%s,我今年%d岁了,我今天挣了%f元钱,我的第一编号是%3d号,我的第二个编号是%03d号'%(name,age,3.14,5,6))
# 大家好,我的名字是zhangsan,我今年18岁了,我今天挣了3.140000元钱,我的第一编号是  5号,我的第二个编号是006号

print('大家好,我是%3d号男嘉宾'%15) # 大家好,我是 15号男嘉宾
print('大家好,我是%-3d号男嘉宾'%15) # 大家好,我是15 号男嘉宾
print('大家好,我是%03d号男嘉宾'%15) # 大家好,我是015号男嘉宾
print('我今天挣了%.2f元钱' % 3.1415926) # 我今天挣了3.14元钱

字符串的format方法

# {}可以进行占位符,{}什么都不写,会读取后面的内容一一对应填充
print('大家好,我是{},我今年{}岁了'.format('张三', 18))
# 大家好,我是张三,我今年18岁了

# {数字}根据数字的顺序来进行填入,数字从0开始
print('大家好,我是{1},我今年{0}岁了'.format(18, '张三'))
# 大家好,我是张三,我今年18岁了

# {变量名}
print('大家好,我是{name},我今年{age}岁了,我来自{addr}'.format(age=18, name='张三', addr='山东'))
# 大家好,我是张三,我今年18岁了,我来自山东

# 混合使用 {数字} {变量},变量写到最后
print('大家好,我是{name},我今年{1}岁了,我来自{0}'.format('泰国', 23, name='张三'))
# 大家好,我是张三,我今年23岁了,我来自泰国

# {} {数字} 这种形式不能混合使用

# 列表使用
d = ['张三', 18, '上海', 180]
print('大家好,我是{},我今年{}岁了,我来自{},我是身高{}cm'.format(*d))
# 大家好,我是张三,我今年18岁了,我来自上海,我是身高180cm

# 字典
info = {'name': 'chris', 'age': 23, 'addr': '北京', 'height': 180}
print('大家好,我是{name},我今年{age}岁了,我来自{addr},我是身高{height}cm'.format(**info))
# 大家好,我是chris,我今年23岁了,我来自北京,我是身高180cm
posted @ 2021-02-06 15:24  群哥V  阅读(138)  评论(0)    收藏  举报