python学习6
数据类型
元组
1. 元组的定义与访问
- 元组的定义
#创建空元组
tup1 = ()
#元组的定义
tup1 = (50) #不加逗号,类型为整型
print(type(tup1)) #<class 'int'>
tup1 = (50,) #加逗号,类型为元组
print(type(tup1)) #<class 'tuple'>
另外一种写法:
tup1 = (50,60,70,80.0,"abc",True,50)
print(tup1,type(tup1))
tup1 = 50,60,70 #小括号可以省略
tup1 = 50, #建议加上括号,避免和数值混淆
print(tup1,type(tup1))
2. 常用操作
操作名称 | 操作方法 | 举例 |
---|---|---|
访问元组中的元素 | 通过下标直接访问 | print(tuple1[0]) |
遍历元组 | 通过for循环 | for i in tuple1: print(i) |
元组的切片 | 使用[: :] | tuple1[2:5:2] |
元组的加法操作 | + | tuple3 = tuple1 + tuple2 |
增:(连接)
tup1 = (12,34,56)
tup2 = ("abc","def")
tup = tup1 + tup2
print(tup,type(tup)) #(12, 34, 56, 'abc', 'def') <class 'tuple'>
删:(删除的是元组对象,而不是元素)
tup1 = (12,34,56)
print(tup1)
del tup1
print("删除后:")
print(tup1) #删除元组后,再次访问会报错 NameError: name 'tup1' is not defined
改:(不能修改)
tup1 = (12,34,56)
tup1[0] = 1
print(tup1[0]) #报错
#tuple里面的可变元素,元素内的内容可以更改
mylist = ["A","B"]
tup1 = (10,20,30,mylist)
print(tup1)
tup1[-1].append("C")
print(tup1)
查:
操作名称 | 操作方法 | 举例 |
---|---|---|
元组成员关系 | in | 2 in list1 |
得到重复元素数量 | count | tuple1.count(1) |
操作名称 | 操作方法 |
---|---|
获取元组长度 | len() |
获取元组元素最大值 | max() |
获取元组元素最小值 | min() |
将元组各元素求和 | sum() |
其它类型对象转换成元组 | tuple() |
#切片
tup1 = ("abc","def",2020,2030,333,444,555,666)
print(tup1[0]) #abc
print(tup1[-1]) #访问最后一个元素 666
print(tup1[1:5]) #左闭右开,进行切片 ('def', 2020, 2030, 333)
tup = (1,2,3,4,5,6,7,3,3,3) #元组的元素内容可以重复
for i in tup:
print(i)
#包含 in,not in
if 3 in tup:
print("True")
else:
print("False")
#计数 count
print(tup.count(3))
tup = (1, 2, 3, 4, 5, 6, 7, 3, 3, 3)
#最大/最小/求和/个数 max、min、sum、len
print("元组中最大的元素:", max(tup))
print("元组中最小的元素:", min(tup))
print("元组中各元素的和:", sum(tup))
print("元组中元素的个数:", len(tup))
#强制类型转化 tuple()
#强制类型转化:字符串
s = "IT大神"
tup = tuple(s)
print(tup,type(tup)) #('I', 'T', '大', '神')
#B强制类型转化:列表
list1 = ["a","b","c"]
tup = tuple(list1)
print(tup,type(tup))
#生成器对象 (了解)
s = (x*2 for x in range(5))
print(tuple(s))
字典
1. 字典的定义
变量info为字典类型:
info = {} #定义一个空字典
info = {"name":"张三","age":18,("aa"):[1,2]}
print(info,type(info))
说明:
- 字典和列表一样,也能够存储多个数据
- 列表中找某个元素时,是根据下标进行的
- 字典中找某个元素时,是根据’名字’(就是冒号:前面的那个值,例如上面代码中的’name’、‘age’、(“aa”)
- 字典的每个元素由2部分组成,键:值。例如 ‘name’:‘班长’ ,'name’为键,'班长’为值
使用列表创建字典【fromkeys】
namelist = ["张三","李四","王五"]
#dic1 = {}.fromkeys(namelist) #以列表中的元素内容作为键,创建字典;值默认为None
dic1 = {}.fromkeys(namelist,"帅") #可以设定统一的默认值
dic1 = {}.fromkeys(namelist,["帅","好看","漂亮"]) ##无法逐一设置不同的默认值
print(id(dic1["张三"]),id(dic1["李四"]),id(dic1["王五"])) ##dic中的每个键都被指向了同一个地址空间
print(dic1)
2. 根据键访问值
info = {"name":"张三","age":18}
print(info["name"]) #获取姓名
print(info["age"]) #获取年龄
#print(info['sex']) #获取不存在的key,会发生异常,错误类型位:KeyError
print(info.get('sex')) #获取不存在的key,获取到空的内容,不会出现异常
print(info.get("age","20")) #找到键的情况下,修改键对应的值
print(info.get("gender","m")) #没有找到,可以设定返回的默认值
3. 常用操作:
操作名称 | 操作方法 | 举例 |
---|---|---|
访问字典中的元素(1) | 通过key访问,key不存在会抛出异常 | print(dict1[“小明”]) |
访问字典中的元素(2) | 通过get方法,不存在返回None,不抛出异常 | print(dict1.get(“”小明)) |
遍历字典(1) | 通过for循环,只能获取key | for key in dict1: print(key, dict1[key]) |
遍历字典(2) | 配合items方法,获取key和val | for key, val in dict1.items(): print(key, val) |
直接获取所有key和value | 使用keys和values方法 | print(dict1.values()) print(dict1.keys()) |
修改val | 直接通过key修改 | dict1[‘小明’] = 2003 |
新增键值对 | 直接新增 | dict1[‘小李’] = 2005 |
#增
info = {"name":"张三","age":18}
newID= input("请输入新的学号:")
info["id"] = newID
print(info["id"])
操作名称 | 操作方法 | 举例 |
---|---|---|
字典元素的删除 | 通过key删除 | del dict1[“小明”] |
字典元素的弹出 | 通过pop方法 | dict1.pop(“小李”) |
判断key是否存在 | in | “key” in dict1 |
合并字典 | update | dict1.update(dict2) |
把两个列表转为字典 | dict+zip方法 | dict(zip(list1,list2)) |
把一个嵌套列表转为字典 | dict方法 | dict2 = dict([[‘key1’, ‘value1’]]) |
清除字典内的元素 | clear方法 | dict1.clear() |
#删:[del]
info = {"name":"张三","age":18}
del info["name"]
print(info) #{'age': 18}
print(info["name"]) #删除了指定键值对后,再次访问会报错 KeyError: 'name'
info = {"name":"张三","age":18}
del info #删除字典对象
print(info) #name 'info' is not defined
#删:[clear] 清空
info = {"name":"张三","age":18}
info.clear()
print(info) #{}
#删:[pop] [popitem]
info = {"name":"张三","age":18,"性别":"男"}
gender = info.pop("性别") #通过键,删除指定的键值对:会返回删除的键值对的值
gender = info.pop("gender") #删除一个不存在的键:会报错:KeyError
gender = info.pop("gender","不存在该键") #删除一个不存在的键,会报错:没有找到指定键可以返回默认值
gender = info.popitem() #删除最后一个键值对,返回的是:元组类型
gender = info.popitem()
print(type(gender),info)
#查:遍历
info = {"name":"张三","age":18}
for i in info: #默认或得到的就是字典的"键"
print(i)
print(info.keys(),type(info.keys())) #得到所有的键(可迭代对象),可以理解为:列表
print(info.values(),type(info.values())) #得到所有的值(可迭代对象),可以理解为:列表
print(info.items(),type(info.items())) #得到所有的项(可迭代对象),#可以理解为:每个键值对是一个元组
#遍历所有的键
for key in info.keys():
print(key)
for value in info.values():
print(value)
#遍历所有的键值对
for key,value in info.items():
print(f"key={key},value={value}")
#扩展:使用枚举函数,同时拿到列表中的下标和元素内容
mylist = ["a","b","c","d"]
# print(type(enumerate(mylist)))
for i,x in enumerate(mylist):
print(i+1,x)
操作名称 | 操作方法 | 举例 |
---|---|---|
获取字典长度 | len() | |
获取最大的key | max() | |
获取最小的key | min() | |
其它类型对象转换成字典 | dict() | dict([(1, 2), (2, 3)]) |