① List类型的使用(排序算法及查找算法)
② Dict类型及使用
③ 元组类型及使用
④ Set类型及使用
一、List类型的使用
基本数据类型按功能分类
(1)标准数据类型
类型 描述
None Python中的空值
int/float 数字类型
bool True或者False
str 字符串
(2)容器数据类型
类型 描述
list 列表类型
tuple 元组类型
dict 字典类型
set 集合
二、排序算法
1、冒泡排序
从小到大:相邻两个元素进行比较大小,将大数往后放,
一趟排序求出最大数,放在最后位置。
重复以上操作,直到数据从小到大排列。
list=[1,3,5,7,9,2,4,6,8]
long=len(list)
for xiabiao in range(long):
for x in range(long-xiabiao-1):
if list[x]<list[x+1]:
list[x],list[x+1]=list[x+1],list[x]
print(list)
2、选择排序
从小到大:选择第一个元素与之后的元素比较,第一趟
求出最小数,放在第一个位置。
依次选择其它元素重复以上操作,直到数据从小到大排
列。
list=[3,7,5,1,9,2,4,6,8]
long=len(list)
for x in range(long):
mina=x
for y in range(mina+1,long):
if list[mina]>list[y]:
mina=y
list[x],list[mina]=list[mina],list[x]
print(list)
三、查找算法
1、顺序查找
输入要查找的数据,从list第一个元素顺序往下查找,
直到list最后一个元素,当查找到输出位置,若未查找到
显示“查无此数”
lis = [1, 5, 8, 123, 22, 54, 7, 99, 300, 222]
for i in range(len(lis)):
if lis[i]==123:
print(i)
2、二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找
方法。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与
查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将
表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则
进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找
到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成
功。
lis=[1,2,3,4,5,6]
min = 0 # 最小的下标
max = len(lis) - 1 # 最大的下标
i = 0
num=int(input('输入数'))
while True:
i += 1
mid = (max + min) // 2 # 中间的下标每次向下取整
if num >lis[mid]:
min = mid + 1 # 小于需要的猜的数,则将最小下标变为中间的,又因为中间的已经猜过,所以要加1
elif num == lis[mid]:
print("找到数据")
print("一共查找%d次" % i)
break
else:
max = mid - 1 # 大于需要的猜的数,则将最大下标变为中间的,又因为中间的已经猜过,所以要减1
四、字典
Python的字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号 : 分割。每个对之间用逗号 ,
分割。整个字典包括在花括号 { } 中 。
变量名 = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
示例:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict1 = { 'abc': 456 };
dict2 = { 'abc': 123, 98.6: 37 };
1、创建字典
dict1 = {} #创建空字典
dict1['age']=20
person = {'name':'qiwsir','language':'python'} #赋值式的添加或者创建
person['name2'] = 'qiwsier2'
print (person) #打印后发现是随机顺序
tup1 = (['name1','baidu'],['name2','google']) #通过dict()把元组转为字典
website = dict(tup1)
ad = dict(name="qiwsir",age =22) #或者使用key=value的方法
web = {}.fromkeys(("first","second"),"facebook") #使用fromkeys()
2、访问字典
dict数据类型是以键值对的形式存放数据,所以,只要知道键,就能得到值。
本质上是一种映射关系。
person = {'name':'qiwsir','language':'python'}
print (" person ['name']: ", person ['name’])
print (" person ['language']: ", person ['language’])
因为是键与值的映射,所以在读值的时候可以不考虑排序问题,比如说
列表,python需要从头开始读。
因为这个特性,字典读取的效率比较高,数据规模越大,越明显。所以,
mongdb这种非关系型数据库在大的数据方面比较流行。
3、修改字典
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8
dict['School'] = "DPS School"
print("dict['Age']: ", dict['Age’])
print( "dict['School']: ", dict['School’])
4、删除字典元素
#向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name’] # 删除键是'Name'的条目
dict.clear() # 清空词典所有条目
del dict # 删除词典
print("dict['Age']: ", dict['Age’])
print("dict['School']: ", dict['School’])
#打印字典不存在的key或者删除清空后的字典都会报错
五、 元组tuple
1、概念
Python的元组与列表类似,不同之处在于元组的元素不能修改
变量名 = (1,'a',变量等)
()内可以是 number、string、bool 等
2、tuple示例
tup1 = ('窝窝头'
, 'wotou', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";
str1='hello'
tup4 = (True,'a',666,str1)
tup5 = 233,
3、对 tuple 的操作
#– 创建
• tup1 = ('窝窝头', 'wotou', 1997, 2000) #直接创建
• tup2 = "a", "b", "c", "d" #不用括号
• tup3 = tuple('hello') #使用tuple()函数把字符串变为元组
• tup4 = tuple([1,2,3]) #使用tuple()函数把列表转为元组
#– 元组操作符 + ,* ,in 判断
• tup1+tup2
• tup3*2
• 3 in tup4
六、 集合set
1、概念
set是一个无序且不重复的元素集合。
2、创建集合的语法形式
变量名= set( )
3、dict示例:
s1 = {1,2,3}
s2 = set('456')
s3 = set( [1,1,2,2,'a','b','b','c'] ) # 会去重
5-5 list与dict的应用
#构建一个学生库,保存3位学员信息,接下来完成新增学员,查找学员,删除学员,修改学员信息的功能。
stu1={'id':1,'name':'aa','age':12,'sex':'男'}
stu2 = {'id': 2, 'name': 'aa1', 'age': 12, 'sex': '男'}
stu3 = {'id': 3, 'name': 'aa2', 'age': 14, 'sex': '男'}
stuLib=[stu1,stu2,stu3]