Python之数据类型3
1、列表常用方法
"""
列表常用方法
"""
li = [1, 2, 3]
li.append(4)
print(li)
li.append([5, 5])
print(li) # [1,2,3,[5,5]] 在list最后添加元素
li.extend([5, 5])
print(li) # [1, 2, 3, 5, 5] 将列表元素直接扩展到li后面
li1 = [1, 2, 3, [3, 3]]
print(li1.count(3)) # 统计某元素出现的次数,返回整数
li2 = [1, 2, 3, 2, 3]
print(li2.index(3)) # 返回元素所在索引位置(小的那个) # 当字符不存在时会报错
li3 = ["happy", "year"]
li3.insert(1, "new") # index,obj:在index前面插入obj
print(li3)
li4 = [1, 2, 3]
del li4 # 直接把li4给删除了
print(li4)
li4.clear() # 清空列表
print(li4)
li5 = [1, 2, 3]
print(li5.copy())
li6 = li5
print(li6) # [1, 2, 3]
注意: copy()是浅拷贝,拷贝后的对象与拷贝前的对象数据相等,但是它们的地址不相同。
2、元组的创建
案例
tu = ()
print(type(tu)) # <class 'tuple'>
tu1 = tuple()
print(type(tu1)) # <class 'tuple'>
tu2 = tuple("12345,") # iterable
print(tu2)
# tu3 = tuple(123,) # 注意:一定为可迭代对象,所以整数不可作为参数,会报错
# print(tu3)
tu4 = (123,) # tuple 注意:以(,)这种方式创建,只有一个元素时记得跟上英文状态下逗号,否则会觉得就是普通小括号
print(tu4)
tu5 = (123) # int
print(type(tu5))
3、元组与列表相同操作
案例
# tu = tuple("12345")
# print(tu[1]) # '2'
#
# print(tu[2:4]) # ("3","4")
# tu1 = (1,2,3,4,5,5,5,4)
# print(tu1.count(5)) # 3
# print(tu1.index(5)) # 4
# tuple类型只有以上两种方法,那如果想实现反转以及排序,如何处理?
# tu2 = (3, 2, 5)
# print(tu2[::-1])
# print(tuple(reversed(tu2))) # reversed:内置的反转类
# print(list(reversed(tu2))) # reversed:内置的反转类
#
# print(sorted(tu2)) # 升序,返回list
# tu3 = (1, 2, 3)
# tu4 = (2, 2, 3)
# print(tu3 + tu4) # 拼接
# print(tu3 * tu4) # 不能元组与元组相乘
# print(tu3 * 2) # 扩展
4、元组不可用的操作
案例
# tu = (1, 2, 3)
# tu[1] = 5 # 不可元素的修改
# print(tu)
# tu1 = tu + (4,) # 只能创建新的元组,而不能修改元组
# print(id(tu))
# print(id(tu1))
# print(tu1)
# tu1 = (1,2,3,["amy",5]) # 可改:不许修改仅在一级元素是元组
# tu1[3][0] = 4
# print(tu1)
#
# tu2 = (1,2,3,("amy",5)) # 不可改
# tu2[3][0] = 4
# print(tu2)
# 元组所消耗的内存比列表要少
# 当你的元素不需要改变的时候 推荐使用元组
# 当你的元素需要改变的时候 推荐使用列表
# list-->tuple
# li = [4, 5, 6]
# print(tuple(li))
# tuple-->list
# tu3 = (1, 2, 3)
# print(list(tu3))
5、字典的创建
案例
# 创建空字典
# dic = {}
# print(dic)
# print(type(dic)) # <class 'dict'>
# 创建字典 元素不限 值可以为任意类型
# cgt_infor = {"addr": "hunan", "age": 18, "hobbit": ["study python", "badminton"]}
# 注意1:键只能是不可变数据类型
# cgt_infor = {["addr"]: "hunan"} # 报错,因为[]是可变类型
# cgt_infor = {("addr"): "hunan"} # 可以,因为()是不可变类型
# 注意2:键需要唯一,但是有重复键时,覆盖。
# cgt_infor = {"addr": "hunan", "addr": "深圳", "addr": "北京"}
# print(cgt_infor)
# 创建字典
# dic2 = dict()
# print(dic2)
# print(type(dic2))
# dict(**kwargs) 键值对
dic3 = dict(name="amy", age=18)
print(dic3)
# dict(mapping) 映射 ("name","amy")
dic4 = dict([("name", "amy"), ("age", 18)])
print(dic4)
dic5 = {'name': 'amy', 'age': 18}
print(dic3 == dic4 == dic5)
注意:dict的多种创建方式,它们的值是相等的,但是在内存中的地址不同
6、map与zip拓展
案例:
# 需求 list("1234") --> [1,2,3,4]-->将li中的每个元素转为int类型
# li = list("1234")
# map(func, *iterables)
# print(map(int, li)) # map对象:映射,将li当中的每个元素传到了int()当中,再返回
# print(list(map(int, li))) # 将map对象转为list呈现
# ipt = input("请输入:") # 1 3 5 9
# print(list(map(int, ipt.split(" "))))
# 目标:[("name","winter"),("age",18)]
# li_k = ["name", "age"]
# li_v = ["winter", 18]
# print(zip(li_k, li_v)) # zip对象:打包,将可迭代对象里面一一对应的元素打包元组进行返回
# print(dict(list(zip(li_k, li_v))))
# def f_map(key_a, value_b):
# return (key_a, value_b)
#
#
# print(dict(list(map(f_map, li_k, li_v))))
7、字典的增改查
案例
dic1 = {"name": "amy", "age": 18}
# 查询值
# print(dic1[0]) # 报错,dict它是集合类型,集合类型没有下标说法。
# print(dic1["name"]) # dic[exit_key]
# print(dic1["sex"]) # 注意:当key值不存在时,访问则报错
# 增加值,取出赋值
dic1["gender"] = "female"
# print(dic1)
# 修改值,取出重新赋值
dic1["gender"] = "male"
# print(dic1)
8、字典的删
案例
dic1 = {"name": "amy", "age": 18}
# 删除指定的值
# del dic1["name"]
# print(dic1)
# dic1.pop() # 报错,dict.pop必须传参数
# print(dic1)
# dic1.pop("age")
# print(dic1)
# 删除整个字典
# del dic1
# 清空字典
# dic1.clear()
# print(dic1)
9、字典的常用方法
案例:
dic1 = {"name": "amy", "age": 18}
# print(dic1.get("name"))
# print(dic1.get("gender")) # None 直接用方括号通过不存在的键获取值会报错,但是使用get获取返回None
print(dic1.items()) # [('name', 'amy'), ('age', 18)]
# for key, value in dic1.items():
# print(key, value)
# 获取所有的key
print(dic1.keys())
# 获取所有的value
print(dic1.values())
作业
题1
list1 = ['name', 'author', 'introduce']
list2 = ['NORWEGIAN WOOD', 'Haruki Murakami', 'balala....']
# 方法1
print(dict(zip(list1, list2)))
# 方法2
def combine(key, value):
return (key, value)
print(dict(map(combine, list1, list2)))
# 方法3
obj = {}
for i in range(0, 3):
obj[list1[i]] = list2[i]
print(obj)
打印结果都是:{‘name’: ‘NORWEGIAN WOOD’, ‘author’: ‘Haruki Murakami’, ‘introduce’: ‘balala…’}
题2
amy_info = {'name': 'amy', 'addr': 'hunan', 'weight': 90}
# 获取所有的key
print(amy_info.keys())
# 获取所有的value
print(amy_info.values())
# 获取映射关系
print(amy_info.items())
题3
# 字节转字符串的方法:decode(),也叫解码过程
by = b'hello'
print(by) # b'hello'
print(by.decode()) # hello
# 字符串转字节的方法:encode(),也加加密过程
str1 = 'world'
print(str1.encode()) # b'world'
注意:字节的另外一种创建方法=》print(bytes(‘hello world’,encoding=‘utf8’)) # b’hello world’