关于容器
程序 = 数据结构+算法
容器:
>.list-列表
>.tuple-元组
>.dict-字典
>.set-集合
一、列表(list)
· 有序、可重复容器模型,可以存储任意类型
· 使用 中括号创建[ ]
· 类型为list
· 底层为线性表 - 链表实现
1.1 列表的创建
· 1.直接赋值
list1 = [1,2,3,4,5,6]
print(list1 , type(list1))
·2.list() 函数创建
list2 = list([1, 2, 3, 4, 5, 6])
·3.创建空列表
list3 = []
print(list3)
list4 = list()
print(list4)
1.2 列表的访问
·线性结构可以通过下标访问,下标从0开始
# --- 通过下标访问 可以正序访问(0~n-1),可以倒序访问 (-1~-n),超出范围报错
print(list1[0])
print(list1[-6]) #倒数第六
1.3 列表的遍历
·1.for循环遍历
for i in list1:
print(i)
for i in range(len(list1)): # range 函数创建(i,i+1,i+2,i+3....i+n)的整数序列
print(list[i])
·2.while循环遍历
index = 0 # 创建索引
while index < len(list1):
print(list1[index])
index += 1
1.4列表常用方法
1.5 列表其他操作
· 加
· 乘
· 判断某个元素是否在列表中
numbers1 = [11,22,33]
print(numbers1 + numbers1) # 加
print(numbers1 * 3) # 乘
print(11 in numbers1) # 判断
1.6 嵌套列表
1.列表中的元素可以为任意元素
res = ["zhangsan",18,True,[80,90,100]]
print(res)
print(res[3]) # 访问学生成绩
print(res[3][0]) # 访问学生语文成绩
2.访问嵌套列表中内容时,采用二维的索引获取
遍历二维列表
for student in res:
if type(student) == list:
for score in student:
print(score) # [80,90,100]
1.9 列表推导式
new_list = [x + 3 for x in list2 if x >= 2]
print(new_list)
二、元组(tuple)
· 有序、可重复但不可更改容器模型
· 使用圆括号“ ()” 创建
· 类型为tuple
2.1 创建元组
1.创建空元组
tuple1 = ()
print(tuple1)
print(type(tuple1)) #tuple <class 'tuple'>
2.创建空元组2
tuple2 = tuple()
print(tuple2)
print(type(tuple2))
3.创建有元素的元组
tuple2 = (1,2,2,3,"a",[1,2,3])
print(tuple2)
2.2元组的元素不能被改变 ---作用:就是在使用函数传递参数时,元组比列表快!
#tuple[3]="b" #TypeError:'tuple' object does not support item assignment
2.3元组的常用方法(函数)API(Application programming Interface)应用程序接口
1.count(任意元素值)->当前元素在元组中的个数
print(tuple2.count(2))
2.index(任意元素)—>当前元素第一次出现的索引值
print(tuple2.index(2))
2.4元组和列表的区别
三、字典(dict)
1.字典创建
-格式:{} | dict()
2.访问字典
!!!所谓操作字典,主要操作的是字典的键
- 键唯一
- 键无序
- 底层是散列数组 + 链表 + 红黑树完成
3.字典的常用API
4.字典的遍历
5.生成字典
3.1 创建空字典
dict1 = {}
print(dict1)
print(type(dict1)) #<class 'dict'>
dict2 = dict()
print(type(dict2))
3.2 创建元素字典
dict3 = {"username" : "zhangsan","password" : "123","age" : "18","salary" : 10000}
print(dict3)
3.3 访问字典中的元素
1.通过中括号[键] -> 值、
print(dict3["username"]) #zhangsan
2.get方法
print(dict3.get("username")) #zhangsan
3.操作键改变值,键相同则覆盖值,否则添加新的键-值对
dict3["username"] = "list"
dict3["location"] = "西安市"
print(dict3) #结果zhangsan变成list,末尾添加location 西安市
3.4 字典的常用api
1.keys 获取所有的键k
print(dict3.keys())
2.values 获取所有的值v
print(dict3.values())
3.items 获取所有的键值对
print(dict3.items())
3.5 字典的遍历(获取/操作所有的元素值)
1.遍历所有的键
for key in dict3.keys():
print("键" , key , "--->" , "值:" , dict3.get(key))
2.遍历所有的键第二种方式
for key in dict3:
print("键", key ,"--->" , "值" ,dict3.get(key))
3.遍历所有值
for value in dict3.values():
print("值:", value)
4.pop:取出键对应的值,原字典发生改变
print("pop后的结果:" ,dict3.pop("location"))
print(dict3)
3.6 字典的生成
1.dict.setdefault 获取字典中指定键的值
如果该键不存在于字典中,则将其插入字典并返回指定的默认值。如果键已经存在,则返回其当前值。
list_res = ["name" , "age" , "height"]
dict3.setdefault("height",197) #TypeError: descripton'setdefault'for 'dict"obiects doesn't apply to a 'list' object
print(dict3) #{'username':'lisi','password':'123','age':18,'salary': 10000,'height': 197)
2.zib内置函数
res1 = ["name" , "age" , "height"]
res2 = ["zhangsan" , 18 , "200" ,1000]
#zip函数 strict参数为True时,列表1和列表2长度必须一致
#dict5 = dict(zip(res1,res2,strict = True)) #ValueError: zip()argument 2 is longer than argument 1
dict5 = dict(zip(res1 , res2))
print(dict5) #{'name': 'zhangsan', 'age': 18, 'height': '200'}
四、集合(set)
set --- 集合 --- set操作等于操作字典的键、
-set是无序
1.创建set
-{}
- set() -转化类型的功能
2.访问set
3.常用API
4.1 创建set
1.创建空set
set1 = set()
print(type(set1))
2.创建有元素的set
set2 = {1 , 2 , 3 ,"zhangsan"}
print(set2)
print(type(set2))
set3 = set("zhangsan")
print(set3)
print(type(set3))
4.2 访问set元素,通过遍历
for item in set2:
print(item)
案例:
username_input = input("请输入一段内容:")
print(set(username_input))
4.3 set的常用API
set3 = {1,2,3,4,5,6,7}
set4 = {8,9,5,6,7}
1.difference 差集 A-B ---> 去除A与B重复内容
set_res = set3.difference(set4) #1,2,3,4
print(set_res)
2.intersection 取相同元素
set_res = set3.intersection(set4)
print(set_res) #{5, 6, 7}
3.union 并集
set_res = set3.union(set4)
print(set_res) #{1, 2, 3, 4, 5, 6, 7, 8, 9}
4.add添加元素,如果重复则覆盖
set4.add(10)
print(set4) #{5, 6, 7, 8, 9, 10}
五、字符串(str)
5.1 字符串的创建
1.直接赋值
# 单引号创建
# str1 = 'i'm a teacher'
str1 = 'i am a teacher'
print(str1)
# 双引号创建
str2 = "i'm a teacher"
print(str2)
# 三引号创建
str3 = """i'm a teacher"""
print(str3)
str4 = """
静夜思
李白
窗前明月光,
疑是地上霜,
举头望明月,
低头思故乡。
"""
print(str4)
2.使用str()
# 使用str()创建
str5 = str("i'm a teacher")
print(str5)
# 使用str()将其他类型转为字符串
res = True
print(res,type(res))
str6 = str(res)
print(str6,type(str6))
5.2 字符串的索引
str7 = str("zhangsan")
print(str7[0]) # 取第一个字符
print(str7[len(str7)-1]) # 取最后一个字符 len表示获取字符串长度
print(str7[-1])
print(str7[-len(str7)])
# print(str7[len(str7)]) IndexError: string index out of range
5.3字符串切片
str8 = "www.baidu.com"
print(str8[:]) # 所有
print(str8[4:])
print(str8[:9]) # 前包后不包
print(str8[4:9])
print(str8[::])
print(str8[::2])
5.4 字符串的遍历
for循环遍历
for s in str8:
print(s)
5.5字符串格式化
print("name:%s,age:%d,score:%f。" % ("zhangsan", 28, 98.5))
print("name:%(name)s , age:%(age)d" % {'name': "zhangsan", "age": 28})
print("name:{},age:{}".format("zhangsan", 28))
5.6 字符串运算符
print("zhangsan" + "True")
# print("zahngsan" + True) TypeError 必须类型匹配
5.7字符串函数
print(repr("zhangsan"))
print(ord("z"))
print(chr(122))
5.8字符串常用方法
测试
# 8.字符串的常用API(application programming inteface) 应用程序接口
# 转换字母
res_str = " I Love Python "
print(res_str.upper())
print(res_str.lower())
print(res_str.swapcase())
# 去除两边空格 zhangsan
print(res_str.strip())
# center
print(len(res_str)) #15
print(res_str.center(18,"-"))
# find 如果找不到返回-1
print(res_str.find("Love"))
# indexof 返回当前字符第一次出现的索引位置
print(res_str.index("L"))
# replace("需要替换的字符","替换字符")
print("tmd,666".replace("tmd","***"))
# "连接符".join(源字符串)
print("-".join(res_str))
# count
print(res_str.count("o"))
# 判断开头和结尾
print("www.baidu.com".startswith("www"))
print("www.baidu.com".endswith("com"))
# 截取字符
print("www.oracle.com".split(".")[1])
# 将字符串分为三部分
print(res_str.partition("Love"))
# maketrans()
s1 = "aoeiu"
s2 = "12345"
res = str.maketrans(s1,s2)
print(res)
# translate
s3 = "This is a String Example ... wa ou wa ou wa ou "
# Th4s 4s 1 Str4ng Ex1mpl3 ... w1 25 w1 25 w1 25
print(s3.translate(res))