一.字符串的相关操作

1.字符串的拼接 +

strvar = "今天是" + "星期一"
strvar += ",今天非常开心"
print(strvar)

2.字符串的重复 *

strvar = "重要的事情说三遍" * 3
print(strvar)

3.字符串跨行拼接 \

strvar = "sdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdf" \
"多余的几行放在第二行进行显示"
print(strvar)

4.字符串的索引

# 正向索引   0123
strvar =    "1234"
# 逆向索引  -4-3-2-1

5.字符串的切片:(切片 <=> 截取)

# (1)[开始索引:]  从开始索引截取到字符串的最后
strvar = "黑夜给我了黑色的眼睛,但是我却用翻白眼"
res = strvar[11:]
print(res)

# (2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
res = strvar[:10]
print(res)

# (3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
res = strvar[8:10]
print(res)

# (4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取字符
# 正序
res = strvar[::3] # 0 3 6 9 12 15 ....从开始截取到最后
print(res)
# 倒序
res = strvar[::-1] # -1 -2 -3 -4 -5 -6 -7 ...
print(res)

# (5)[:]或[::]  截取所有字符串
res = strvar[:]
res = strvar[::]
print(res)

二.字符串相关函数

1.*capitalize 字符串首字母大写

strvar = "how old are you"
res = strvar.capitalize()
print(res)

2.title 每个单词的首字母大写

strvar = "how old are you"
res = strvar.title()
print(res)

3.*upper 将所有字母变成大写

strvar = "to be or not to be that is a question"
res = strvar.upper()
print(res)

4.*lower 将所有字母变成小写

res = strvar.lower()
print(res)

5.*swapcase 大小写互换

strvar = "I Love You"
res = strvar.swapcase()
print(res)

6.*len 计算字符串的长度

strvar = "adfs234sdfsa"
res = len(strvar)
print(res)

7.*count 统计字符串中某个元素的数量

strvar = "adfs234sdfsa"
res = strvar.count("a")
print(res)

8.*find 查找某个字符串第一次出现的索引位置 (推荐)

"""字符串.find("字符",开始索引,结束索引) 如果找不到直接返回-1"""
strvar = "oh Father this is my Favorate dog"
res = strvar.find("F")
res = strvar.find("F",4)
res = strvar.find("Fav",5,10) # 结束索引本身取不到,取到之前的那个值
print(res)

# *index 与 find 功能相同 find找不到返回-1,index找不到数据直接报错
# res = strvar.index("Fav",5,10) error

9.*startswith 判断是否以某个字符或字符串为开头

"""字符串.startswith("字符",开始索引,结束索引) 如果存在返回True,否则返回False"""
strvar = "oh Father this is my Favorate dog"
res = strvar.startswith("oh")
res = strvar.startswith("this",10)
res = strvar.startswith("this",10,13) # 10 11 12
print(res)

10.*endswith 判断是否以某个字符或字符串结尾

res = strvar.endswith("dog")
res = strvar.endswith("rate",-12)
res = strvar.endswith("rate",-12,-4)
print(res)

11.*isupper 判断字符串是否都是大写字母

strvar = "ABCD"
res = strvar.isupper()
print(res)

12.*islower 判断字符串是否都是小写字母

strvar = "abcdd12345"
res = strvar.islower()
print(res)

13.*isdecimal 检测字符串是否以数字组成 必须是纯数字

strvar = "12354"
strvar = "12354.8979112"
res = strvar.isdecimal()
print(res)

strvar = “abc”

14.ljust 填充字符串,原字符居左 (默认填充空格)

res = strvar.ljust(10)
print(res)

15.rjust 填充字符串,原字符居右 (默认填充空格)

res = strvar.rjust(10,"&")
print(res)

16.*center 填充字符串,原字符居中 (默认填充空格)

res = strvar.center(10) # 原字符串长度 + 填充字符长度 = 10 ,默认填充空格
res = strvar.center(10,"#")
print(res)

17.*strip 默认去掉首尾两边的空白符

strvar = "@@@@@	周杰伦           @@@@@"
res = strvar.strip()
res = strvar.strip("@") # 指定去掉的符号
print(res)
strvar = "@@@@@	周杰伦           @@@@@"
#rstrip 去掉右边某个字符 
print(  strvar.rstrip("@")   )
#lstrip 去掉左边某个字符 
print(  strvar.lstrip("@")   )

==重要!!! ==

18.*split 按某字符将字符串分割成列表(默认字符是空格)

strvar = "you can you up no can no bb"
lst = strvar.split()
strvar = "you-can-you-up-no-can-no-bb"
lst = strvar.split("-")   # 从左到右分隔
lst = strvar.rsplit("-",2)# 从右到左分隔,(可以指定分隔的次数)
print(lst)

19.*join 按某字符将列表拼接成字符串(容器类型都可)

lst = ['you', 'can', 'you', 'up', 'no', 'can', 'no', 'bb']
res = "-".join(lst)
print(res)

20.*replace 替换,把字符串的旧字符换成新字符

"""replace(要替换的字符,替换成什么,替换的次数)"""
strvar = "可爱的小青蛙喜欢吃蚊子,有没有,有没有,还有没有"
res = strvar.replace("有没有","真没有")
res = strvar.replace("有没有","真没有",1)
print(res)

三.字符串的格式化 format

1.顺序传参

strvar = "{}向{}开了一枪,银弹而亡".format("李志辉","明浩")
print(strvar)

2.索引传参

strvar = "考试时{1},游戏时{0}".format("唯唯诺诺","重拳出击")
print(strvar)

3.关键字传参

strvar = "{who2}甩了一个飞吻,{who1}神魂颠倒".format(who1="刘彩霞",who2="马生平")
print(strvar)

4.容器类型数据(列表或元祖)传参

strvar = "{1[2]}向{0[0]}抛了一个媚眼,鼻血直冒三万多尺,失血而亡".format(["孙翔群","曹晨光","宋云杰"],("李亚","孙致和","温子月"))
print(strvar)
# format当中,不能使用逆向下标,不识别
strvar = "{group2[0]}向{group1[-1]}抛了一个媚眼,鼻血直冒三万多尺,失血而亡".format(group1 = ["孙翔群","曹晨光","宋云杰"],group2 = ("李亚","孙致和","温子月"))
print(strvar)
# 如果容器是字典,直接写键值,不需要加上引号
strvar = "{group1[ccg]}向{group2[1]}抛了一个媚眼,鼻血直冒三万多尺,失血而亡".format(group1 = {"kxq":"孙翔群","ccg":"曹晨光","syj":"宋云杰"},group2 = ("李亚","孙致和","温子月"))
print(strvar)

5.format的填充符号的使用( ^ > < )

^  原字符串居中
>  原字符串居右
<  原字符串居左
{who:*^10}
who : 关键字参数
*   : 要填充的字符
^   : 原字符串居中
10  : 总长度 = 原字符串长度 + 填充字符长度
strvar = "{who:*^10}在{where:>>10},{do:!<10}".format(who="刘鹏",where="电影院",do="学习")
print(strvar)

6.进制转换等特殊符号的使用(:d:f:s:,)

# :d 整型占位符 (要求类型必须是整型)
strvar = "刘子豪昨天买了{:d}个花露水".format(100) # 100.5error
print(strvar)
# :2d 占用两位,不够两位拿空格来补,默认居右
strvar = "刘子豪昨天买了{:2d}个花露水".format(3)
# < > ^ 调整对应的位置
strvar = "刘子豪昨天买了{:<2d}个花露水".format(3)
strvar = "刘子豪昨天买了{:^3d}个花露水".format(3)
print(strvar)

# :f 浮点型占位符 (要求类型必须是浮点型)
strvar = "刘心毕业时,找工作的薪资是{:f}".format(2.5)
# :.2f 小数点保留2位
strvar = "刘心毕业时,找工作的薪资是{:.2f}".format(2.56789)
print(strvar)

# :s 字符串占位符 (要求类型必须是字符串)
strvar = "{:s}".format("今天天气不错,万里无云")
print(strvar)

# :, 金钱占位符
strvar = "{:,}".format(123456789)
print(strvar)


# 综合案例
strvar = "同学们毕业后的平均年薪是{:.1f},可以在北京买{:d}套房,感觉非常{:s}".format(600000.681,1,"棒极了")
print(strvar)

四.列表的相关操作

1.列表的拼接 (同元组)

lst1 = [1,2,3]
lst2 = [4,5,6,6]
res = lst1 + lst2
print(res)

2.列表的重复 (同元组)

res = lst1 * 3
print(res)

3.列表的切片 (同元组)

语法 => 列表[::] 完整格式:[开始索引:结束索引:间隔值]
# (1)[开始索引:] 从开始索引截取到列表的最后
# (2)[:结束索引] 从开头截取到结束索引之前(结束索引-1)
# (3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
# (4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
# (5)[:]或[::] 截取所有列表

lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","王文"]
(1)[开始索引:] 从开始索引截取到列表的最后
res = lst[2:]
print(res)
(2)[:结束索引] 从开头截取到结束索引之前(结束索引-1)
res = lst[:4]
print(res)
(3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
res = lst[4:6]
print(res)
(4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
# 正向截取
res = lst[::2] # 0 2 4 6 8  ... 
print(res)

# 逆向截取
res = lst[::-2] # -1 -3 -5 -7 -9
print(res)
(5)[:]或[::] 截取所有列表
res = lst[:]
res = lst[::]
print(res)

4.列表的获取 (同元组)

#       0          1        2			3     4			5			6    7
lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","王文"]
#     	-8			-7		-6		-5			-4		-3		-2		-1
res = lst[7]
res = lst[-1]
print(res)

5.列表的修改 ( 可切片 )

"""
要求的数据类型是
	可迭代性数据(容器类型数据,range对象,迭代器)
"""
lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","王文"]

# 利用切片可以一次修改多个元素,没有个数上的限制
# lst[1:3] = "abcd"
lst[3:5] = ["往返","晏国彰","牧树人"]
print(lst)

# 切片配合步长,切出多少个元素,修改多少个元素
lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","王文"]
# res = lst[::2]#吕洞宾  铁拐李 张果老 韩湘子
# lst[::2] = "abcd"
lst[::2] = range(1,5) # 0 2 4 6 8 10 .....
print(lst,"<==>")

6.列表的删除 ( 可切片 )

lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","王文"]
# del lst[-1]
# print(lst)

# 删除的是变量res本身,不是列表中的元素
"""
res = lst[-1]
del res
print(lst)
"""

# del lst[:2]
del lst[::3] # 0 3 6 9 12 ...
print(lst)

# 元组中的列表,里面的元素可以修改;
tup = (1,2,3,[4,5,6,(7,8,9)])
tup[-1][1] = 6666
print(tup)