容器类型的相关函数和操作
1.字符串的相关操作和函数
(1) 字符串相关操作
(2) 字符串的相关函数
(3) format的填充符号的使用( ^ > < )
(4) 字符串的格式化format
2.列表的相关操作和函数
(1) 列表的相关操作
(2) 列表相关的函数
(3) 列表的深浅拷贝
3.集合的相关操作和函数
(1) 集合的相关操作 (交差并补)
(2) 集合的相关函数
4.字典的相关函数
1.字符串的相关操作和函数
(1) 字符串相关操作
# ### 1.字符串相关操作
# (1)字符串的拼接 +
res += ",旁边的同学很喜欢他~"
print(res)
# (2)字符串的重复 *
strvar = "重要的事情说三遍~"
res = strvar * 3
print(res)
# (3)字符串跨行拼接 \
str1 = "kskfjskjfklsjfklasdjklfjaskldjfaskljfklasjdfklasjdklfjaskldfjaskldjflasjfsf" \
"1122334"
print(str1)
# (4)字符串的索引
# 0 1 2 3 4 5
strvar = "赵世超真帅呀"
# -6-5-4-3-2-1
print(strvar[1])
# (5)字符串的切片: (截取)
'''
语法 => 字符串[::] 完整格式:[开始索引:结束索引:间隔值]
(1)[开始索引:] 从开始索引截取到字符串的最后
(2)[:结束索引] 从开头截取到结束索引之前(结束索引-1)
(3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
(4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取字符
(5)[:]或[::] 截取所有字符串
从左到右截,间隔值为正值,反过来,间隔值是负值,才能保证截取到数据"""
(2) 字符串的相关函数
# *capitalize 字符串首字母大写
strvar = "how are you"
res = strvar.capitalize()
print(res)
# *title 每个单词的首字母大写
strvar = "how old are you"
res = strvar.title()
print(res)
# *upper 将所有字母变成大写
strvar = "How Old Are You"
res = strvar.upper()
print(res)
# *lower 将所有字母变成小写
res = strvar.lower()
print(res)
# *swapcase 大小写互换
strvar = "How old Are You"
res = strvar.swapcase()
print(res)
# *len 计算字符串的长度
strvar = "python32真热"
res = len(strvar)
print(res)
# *count 统计字符串中某个元素的数量
"""count(字符,[开始值,结束值])"""
strvar = "真热真热呀"
res = strvar.count("热",1,4)
print(res)
# *find 查找某个字符串第一次出现的索引位置(如果find 返回的是 -1 代表没找到)(推荐)
"""find(字符,[开始值,结束值])"""
strvar = "To be or not to be that is a question"
res = strvar.find("be",4,10) # 4 ~ 9
print(res)
# *index 与 find 功能相同 find找不到返回-1,index找不到数据直接报错
res = strvar.index("be",1,10)
print(res)
# *startswith 判断是否以某个字符或字符串为开头
"""
startswith(字符,[开始值,结束值])
endswith(字符,[开始值,结束值])
"""
strvar = "To be or not to be that is a question"
res = strvar.startswith("To",1,10)
print(res)
# *endswith 判断是否以某个字符或字符串结尾
res = strvar.endswith("is",-14,-11)
print(res)
# ### is系列
# *isupper 判断字符串是否都是大写字母
strvar = "HOW A YOU"
res = strvar.isupper()
print(res)
# *islower 判断字符串是否都是小写字母
strvar = "asdf - as"
res = strvar.islower()
print(res)
# *isdecimal 检测字符串是否以数字组成 必须是纯数字
strvar = "2134234"
res = strvar.isdecimal()
print(res)
# *split 按某字符将字符串分割成列表(默认字符是空格) ***
strvar = "you can you up no can no bb"
lst = strvar.split()
print(lst)
# *join 按某字符将列表拼接成字符串(容器类型都可) ***
lst = ['you', 'can', 'you', 'up', 'no', 'can', 'no', 'bb']
strvar = " ".join(lst)
strvar = "#".join(lst)
print(strvar)
# *replace 把字符串的旧字符换成新字符 ***
"""字符串.replace('旧字符','新字符'[, 限制替换的次数])"""
strvar = "范冰冰爱不爱我,爱我,不爱我,爱我,不爱我"
res = strvar.replace("不爱我","爱我",1)
print(res)
# *strip 默认去掉首尾两边的空白符 ***
"""空白符 空格 \n \t \r ... """
strvar = " 周润发 "
res = strvar.strip()
print(strvar)
print(res)
# *center 填充字符串,原字符居中 (默认填充空格)
"""center(字符长度,填充符号)"""
strvar = "赵世超"
res = strvar.center(10,"*")
print(res)
(3) format的填充符号的使用( ^ > < )
# 3.format的填充符号的使用( ^ > < )
"""
^ 原字符串居中显示
> 原字符串居右显示
< 原字符串居左显示
{who:*^10}
* : 填充的符号
^ : 原字符串居中显示
10: 原字符串长度 + 填充符号的长度 = 10
"""
strvar = "{who:*^10}去长春长生医药公司,{do:>>10},感觉{feel:!<10}".format(who="李亚峰",do="扎疫苗",feel="血槽被掏空")
print(strvar)
# (6)进制转换等特殊符号的使用( :d :f :s :, )
# :d 整型占位符 (强制要求类型是整型)
strvar = "刘一峰昨天晚上买了{:d}个花露水泡脚".format(9)
print(strvar)
# :3d 占3位,不够三位拿空格来补位(原字符串居右)
strvar = "刘一峰昨天晚上买了{:3d}个花露水泡脚".format(9)
print(strvar)
strvar = "刘一峰昨天晚上买了{:<3d}个花露水泡脚".format(9)
print(strvar)
strvar = "刘一峰昨天晚上买了{:^3d}个花露水泡脚".format(9)
print(strvar)
# :f 浮点型占位符 (强制要求类型是浮点型) 默认保留小数6位
strvar = "王雨涵毕业之后的薪资是{:f}".format(9.9)
print(strvar)
# :.2f 小数点后保留2位,存在四舍五入
strvar = "王雨涵毕业之后的薪资是{:.2f}".format(9.188888)
print(strvar)
# :s 字符串占位符
strvar = "{:s}".format("杨元涛真帅")
print(strvar)
# :, 金钱占位符
strvar = "{:,}".format(12345678)
print(strvar)
# 综合案例
strvar = "{:s}开工资{:.2f}元,买了{:d}个兰博基尼".format("孙坚",300000.12345,10)
print(strvar)
(4) 字符串的格式化format
# ### 4.字符串的格式化format
# (1)顺序传参
"""{}是format中的占位符"""
strvar = "{}向{}开了一枪,饮蛋而亡".format("赵沈阳","需保障")
print(strvar)
# (2)索引传参
strvar = "{1}向{0}开了一枪,饮蛋而亡".format("赵沈阳","需保障")
print(strvar)
# (3)关键字传参
strvar = "{who1}摸了{who2}一下,回头一巴掌".format(who1="王伟",who2="马春妮")
print(strvar)
# (4)容器类型数据(列表或元祖)传参
# 方法一
strvar = "{0[0]}摸了{1[1]}一下,嘿嘿一笑,有戏".format(["赵蜂拥","赵世超","杨元涛"] , ("王雨涵","王同培"))
print(strvar)
# 方法二(推荐)
strvar = "{group1[0]}摸了{group2[1]}一下,嘿嘿一笑,有戏".format(group1=["赵蜂拥","赵世超","杨元涛"] , group2 = ("王雨涵","王同培"))
print(strvar)
# 方法三(推荐) 注意一.如果该容器是字典,通过键取值时,不需要加引号 注意二.通过下标取值时,不能使用负号(逆向索引)
strvar = "{group1[zfy]}摸了{group2[-1]}一下,嘿嘿一笑,有戏".format(group1={"zfy":"赵蜂拥","zsc":"赵世超"} , group2 = ("王雨涵","王同培"))
print(strvar)
2.列表的相关操作和函数
(1) 列表的相关操作
# ### 列表的相关操作
lst1 = ["孟凡伟","康与众"]
lst2 = ["康与众","张宇"]
# (1)列表的拼接 (同元组)
res = lst1 + lst2
print(res)
# (2)列表的重复 (同元组)
res = lst1 * 3
print(res)
# (3)列表的切片 (同元组)
"""
语法 => 列表[::] 完整格式:[开始索引:结束索引:间隔值]
(1)[开始索引:] 从开始索引截取到列表的最后
(2)[:结束索引] 从开头截取到结束索引之前(结束索引-1)
(3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
(4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
(5)[:]或[::] 截取所有列表
"""
# (4)列表的获取 (同元组)
# 0 1 2
lst = [10,20,30]
# -3 -2 -1
print(lst[-1])
# (5)列表的修改 ( 可切片 )
lst = ["孟凡伟","康与众","张宇","赵沈阳","需保障","梁新宇","沈思雨"]
# 改单个值
lst[1] = "陈璐"
print(lst)
# 改多个值 (如果使用切片进行修改,要求数据必须是Iterable可迭代性数据)
lst[1:4] = ["孙悟空","猪八戒","白骨精"]
lst[1:4] = "你好呀"
print(lst)
# 2.改多个值(带有步长)
"""带有步长的切片修改,切出几个元素就修改几个元素,数量要一致."""
lst = ["孟凡伟","康与众","张宇","赵沈阳","需保障","梁新宇","沈思雨"]
lst[::3] = "abc"
print(lst)
# (6)列表的删除 ( 可切片 )
lst = ["孟凡伟","康与众","张宇","赵沈阳","需保障","梁新宇","沈思雨"]
# 一次删一个
del lst[2]
print(lst)
# 一次删多个
del lst[1:-1]
print(lst)
# 额外的注意点
tup = (1,2,3,4,[10,11,12])
print(tup[-1])
tup[-1][-1] = 13
print(tup)
(2) 列表相关的函数
# 增
# append 向列表的末尾添加新的元素
lst = ["赵沈阳"]
lst.append("沈思雨")
print(lst)
# insert 在指定索引之前插入元素
lst = ['赵沈阳', '沈思雨']
lst.insert(1,"王伟")
print(lst)
# extend 迭代追加所有元素
"""迭代追加的数据是可迭代性数据(容器类型数据,range对象,迭代器)"""
lst = ['赵沈阳', '沈思雨']
lst.extend(range(3))
print(lst)
# 删
# 1.pop 通过指定索引删除元素,若没有索引移除最后那个 (推荐)
lst = ["曹静怡","王志国","邓鹏","合理"]
# 不指定下标,默认删除最后一个
res = lst.pop()
print(res)
print(lst)
# 指定下标,删除具体某个元素
res = lst.pop(1)
print(res)
print(lst)
# 2.remove 通过给予的值来删除,如果多个相同元素,默认删除第一个
lst = ["曹静怡","王志国","合理","邓鹏","合理"]
res = lst.remove("合理")
print(res)
print(lst)
# 3.clear 清空列表
lst = ["曹静怡","王志国","合理","邓鹏","合理"]
lst.clear()
print(lst)
# 改查 参考4.py
# 列表的其他相关函数
# index 获取某个值在列表中的索引
"""index(搜索的值,开始值,结束值(不包含结束值))"""
lst = ["曹静怡","王志国","合理","邓鹏","合理","邓鹏辉","邓鹏蓝","合理","邓鹏绿"]
res = lst.index("合理",3,6) # 3 4 5
print(res)
# count 计算某个元素出现的次数
res = lst.count("合理") # 没有范围的概念
print(res)
# sort 对列表排序
lst = [-90,-100,-1,90,78]
# 从小到大进行排序
lst.sort()
# 从大到小进行排序
lst.sort(reverse=True)
print(lst)
# 对字符串进行排序(按照ascii编码)
lst = ["kobi","james","jordon","yaoming","yi"]
lst.sort()
print(lst)
# 是否可以对中文排序(了解 无规律可循)
lst = ["王文","蔡徐坤"]
lst.sort()
print(lst)
# reverse 列表反转操作
lst = [1,2,"a","蔡徐坤","易烊千玺"]
lst.reverse()
print(lst)
(3) 列表的深浅拷贝
# 1.浅拷贝
# 现象
lst1 = [1,2,3]
lst2 = lst1
lst1.append(4)
print(lst2)
import copy
"""模块.方法() 同名模块下的同名方法"""
# 方法一 (推荐)
lst1 = [1,2,3]
lst2 = copy.copy(lst1)
lst1.append(10)
print(lst2)
print(lst1)
# 方法二
lst1 = [1,2,3]
lst2 = lst1.copy()
lst1.append(11)
print(lst1)
print(lst2)
# 2.深拷贝
# 现象
lst1 = [1,2,3,[4,5,6]]
lst2 = copy.copy(lst1)
lst1[-1].append(77)
lst1.append(8888)
print(lst2)
print(lst1)
import copy
lst1 = [1,2,3,[4,5,6]]
lst2 = copy.deepcopy(lst1)
lst1[-1].append(999)
print(lst2)
print(lst1)
# 其他容器的深拷贝
lst1 = (1,2,3,{"a":1,"b":[10,20]})
lst2 = copy.deepcopy(lst1)
lst1[-1]["b"].append(30)
print(lst1)
print(lst2)
"""
总结:
浅拷贝:
只拷贝一级容器中的所有元素独立出一个单独的空间.
深拷贝:
把所有层级的容器中所有元素都单独拷贝一份,形成独立的空间
"""
"""
tuple 只有count index 两个方法 使用同列表
"""
3.集合的相关操作和函数
(1) 集合的相关操作 (交差并补)
# ### 1.集合的相关操作 (交差并补)
set1 = {"易烊千玺","王一博","刘某PDD","王文"}
set2 = {"倪萍","赵忠祥","金龟子大风车","小龙人","王文"}
# intersection() 交集
res = set1.intersection(set2)
print(res)
# 简写 &
res = set1 & set2
print(res)
# difference() 差集
res = set1.difference(set2)
print(res)
# 简写 -
res = set1 - set2
print(res)
# union() 并集
res = set1.union(set2)
print(res)
# 简写 |
res = set1 | set2
print(res)
# symmetric_difference() 对称差集 (补集情况涵盖在其中)
res = set1.symmetric_difference(set2)
print(res)
# 简写 ^
res = set1 ^ set2
print(res)
# issubset() 判断是否是子集
set1 = {"刘德华","郭富城","张学友","王文"}
set2 = {"王文"}
res = set2.issubset(set1)
print(res)
# 简写
res = set2 < set1
print(res)
# issuperset 判断是否是父集
set1 = {"刘德华","郭富城","张学友","王文"}
set2 = {"王文"}
res = set1.issuperset(set2)
print(res)
# 简写
res = set1 > set2
print(res)
# isdisjoint() 检测两集合是否不相交 不相交 True 相交False
res = set1.isdisjoint(set2)
print(res)
(2) 集合的相关函数
# ### 2.集合的相关函数
# 增
# add() 向集合中添加数据
# 一次加一个
set1 = {"王文"}
set1.add("王伟")
print(set1)
# update() 迭代着增加
# 一次加一堆
set1 = {"王文"}
lst = ["a","b","c"] # 迭代这添加,无序,会自动去重
set1.update(lst)
print(set1)
# 删
# clear() 清空集合
setvar.clear()
print(setvar)
# pop() 随机删除集合中的一个数据
res = setvar.pop()
print(res)
print(setvar)
# discard() 删除集合中指定的值(不存在的不删除 推荐使用) ***
setvar.discard("刘某PDD111111") # success
print(setvar)
# remove() 删除集合中指定的值(不存在则报错) (了解)
setvar.remove("刘某PDD")
print(setvar)
# ### 3.冰冻集合 (额外了解)
"""frozenset 单纯的只能做交差并补操作,不能做添加或者删除的操作"""
lst = ["王文","宋健","何旭彤"]
fz1 = frozenset(lst)
print(fz1, type(fz1))
# 不能再冰冻集合中添加或者删除元素
fz1.add(1)
fz1.update("abc")
fz1.discard("王文")
# 冰冻集合只能做交差并补
lst2 = ["王文","王同培","刘一缝"]
fz2 = frozenset(lst2)
print(fz2, type(fz2))
# 交集
res = fz1 & fz2
print(res)
# 遍历冰冻集合
for i in fz2:
print(i)
4.字典的相关函数
dic = {}
# 增
# 1.普通方法 (推荐)
dic["top"] = "369"
dic["middle"] = "左手"
dic["bottom"] = "杰克爱"
print(dic)
# 2.fromkeys 使用一组键和默认值创建字典
tup = ("a","b","c")
# fromkeys(盛放键的容器,默认值)
dic = {}.fromkeys(tup,None)
print(dic)
# 注意点 (字典中的三个键默认指向的是同一个列表)
dic= {}.fromkeys(tup,[])
print(dic)
dic["a"].append(1)
print(dic)
# 字典中的三个键默认指向不同一个列表
dic = {}
dic["top"] = []
dic["middle"] = []
dic["bottom"] = []
dic["top"].append("the boy")
print(dic)
# 删
dic = {'top': '369', 'middle': '左手', 'bottom': '杰克爱'}
# pop() 通过键去删除键值对 (若没有该键可设置默认值,预防报错)
res = dic.pop("middle")
print(res)
print(dic)
# 可以给pop设置第二个参数值,以防止键不存在时报错
res = dic.pop("middle1234","该键不存在")
print(res)
# popitem() 删除最后一个键值对
dic = {'top': '369', 'middle': '左手', 'bottom': '杰克爱'}
res = dic.popitem()
print(res)
print(dic)
# clear() 清空字典
dic.clear()
print(dic)
# 改
# update() 批量更新(有该键就更新,没该键就添加) (推荐)
# 没该键就添加
dic_new = {"jungle":"karsa","support":"宝蓝"}
dic = {'top': '369', 'middle': '左手', 'bottom': '杰克爱'}
dic.update(dic_new)
print(dic)
# 有该键就更新
dic_new = {"top":"the bug","support":"xboyww","xiaozhang":"王思聪"}
dic.update(dic_new)
print(dic)
# 查
# get() 通过键获取值(若没有该键可设置默认值,预防报错)
dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聪"}
res = dic.get("top")
print(res)
# 可以在获取不到该键时,给与默认值提示.
res = dic.get("top123","抱歉,该键不存在")
print(res)
# 其他操作
# keys() 将字典的键组成新的可迭代对象
dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聪"}
res = dic.keys()
print(res , type(res))
# values() 将字典中的值组成新的可迭代对象 ***
res = dic.values()
print(res , type(res))
# items() 将字典的键值对凑成一个个元组,组成新的可迭代对象 ***
res = dic.items()
print(res , type(res))
for k,v in res:
print(k,v)