数据按照是否能 直接修改 分为 可变类型 和 不可变类型 两种。
Python中字符串是最常用的数据类型,一旦声明就不可变,可以使用for和while进行遍历
字符串类型的数据修改的时候,不能改变原有字符串,属于不能直接修改数据的类型即是不可变类型
创建字符串形式: 变量名 = ‘ hello world ’
引号可以使用 单引号、双引号、三引号
三引号可以在字符串中输出换行
字符串中有单引号时,用双引号创建 或者 字符串中使用 \‘ 转义
字符串输入
input() 接收用户数据,就收的数据格式是 字符串
# 返回字符串长度
string.len()
# 区别于java中的string.length()
下标_字符串
“下标”又叫“索引”,就是编号。下标的作用即是通过下标快速找到对应的数据。
类比C语言中的指针,例如火车座位号的作用︰按照编号快速找到对应的座位。
字符数据在程序运行过程中存储在内存,当要使用一串字符串中某个特定的数据,编译器会将这些字符数据从0开始顺序分配一个编号,使用这个(编号 \ 下标 \ 索引 \ 索引值)精确找到某个字符数据
a = 'bingdundun'
print(a[0])
print(a[1])
print(a[2])
# 下标从0开始
切片_字符串
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
语法:
数据序列[开始位置下标:结束位置下标:步长]
数据序列[位置下标]
注意: [ : ) 左闭右开
1.截取的切片不包含结束位置下标对应的数据,正负整数均可
2.步长是选取间隔,正负整数均可,默认步长为 1
str1 = '012345678'
print(str1[2:5:1]) #234
print(str1[2:5:2])#24
print(str1[2:5])#234
print(str1[:5])# 01234 --如果不写开始,默认从0开始选取
print(str1[2:])# 2345678 --如果不写结束,表示选取到最后
print(str1[:])# 012345678 --如果不写开始和结束,表示选取所有
#负数测试
print(str1 [ ::-1])# 876543210 --如果步长为负数,表示倒序选取
print(str1[-4:-1])# 567 --下标-1表示最后一个字符数据,依次向前类推
print(str1[-4:-1:1])# 567
print(str1[-4:-1:-1])
# 不能选取出数据:从-4开始到-1结束,选取方向为从左到右,但是-1步长:从右向左选取
# 如果选取方向(下标 开始-结束 的方向)和 步长方向 冲突,则无法选取数据,反之可以选取
字符串常用操作方法—查找、修改和判断
查找字符串
查找 子串 在字符串中的位置或出现的次数
语法: 字符串序列.函数名称('子串',开始位置下标,结束位置下标)
注意: 开始和结束位置下标可以省略,表示在整个字符串序列中查找。
find() # 检测某个子串是否包含在这个字符串中,如果存在,返回这个子串第一个开始的位置下标,否则则返回-1
index() # 功能与find()相同,如果index查找子串不存在,报错
count() # 统计某个子串在这个字符串中的次数,如果不存在,返回0
rfind() # 和find()功能相同,但查找方向为右侧开始
rindex() # 和index()功能相同,但查找方向为右侧开始
修改字符串函数
通过函数的形式修改字符串中的数据。
# 替换
replace()
语法:字符串序列.replace('旧子串','新子串',替换次数)
注意:
替换次数如果超出子串出现次数,则替换字符串中所有这个子串
调用了replace函数后,发现原有字符串的数据并没有做到修改,replace函数的返回值是修改后的数据
# 按照指定字符分割字符串,返回一个列表,丢失分割字符
split()
语法: 字符串序列.split('分割字符',num)
注意:
num表示的是分割字符出现的次数,即将来返回数据个数为 num+1 个。
如果分割字符是原有字符串中的子串,分割后则丢失该子串。
# 用一个字符或子串合并字符串,即是将多个字符串合并为一个新的字符串。
join()
语法: '填充字符'.字符或子串.join(多字符串组成的序列)
# 多字符串组成的序列,注意:不包含列表
# 填充字符默认空格
eg:
list1 = ['ren', 'gong', 'zhi', 'neng']
print('_'.join(list1)) # 结果:ren_gong_zhi_neng
t1 = ('aa', 'b', 'cc', 'ddd')
print('...'.join(t1)) # 结果:aa...b...cc...ddd
#大小写转换
capitalize() # 只有字符串首字母大写
语法: new_str = 字符串序列.capitalize()
title() # 每个字符串单词首字母大写
语法: new_str = 字符串序列.title()
upper() # 将字符串的所有 小写字符 转 大写
语法: new_str = 字符串序列.upper()
lower() # 将字符串的所有 大写字符 转 小写
语法: new_str = 字符串序列.lower()
# 删除(strip)空白字符
lstrip() # 删除字符串左侧空白字符。
语法: new_str = 字符串序列.lstrip()
rstrip() # 删除字符串右侧空白字符。
语法: new_str = 字符串序列.rstrip()
strip() # 删除字符串两侧空白字符。
语法: new_str = 字符串序列.strip()
# 字符串对齐
ljust() # 返回一个原字符串左对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
语法: 字符串序列.ljust(长度,填充字符)
rjust() # 返回一个原字符串右对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
center() # 返回一个原字符串居中对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
判断字符串
所谓判断即是判断真假,返回的结果是布尔型数据类型: True 或 False。
startswith()
语法: 字符串序列.startswith('子串',开始位置下标,结束位置下标)
# 检查字符串是否是以指定子串开头,是则返回True,否则返回False。
# 如果设置开始和结束位置下标,则在指定范围内检查。
endswith()
语法: 字符串序列.endswith('子串',开始位置下标,结束位置下标)
# 检查字符串是否是以指定子串结尾,是则返回True,否则返回False。
# 如果设置开始和结束位置下标,则在指定范围内检查。
# 空格是转义字符,不属于字母、数字
isalpha() # 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False。
语法: 字符串序列.isalpha()
isdigit() # 如果字符串只包含数字则返回True否则返回False。
语法: 字符串序列.isdigit()
isalnum() # 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True, 否则返回 False。
#即是否包含符号、转义字符
ispace() # 如果字符串中只包含空白,则返回True,否则返回False。