1 集合
1.1 List列表
-
列表(List)是一种有序和可更改的集合。允许重复的成员。
-
列表是一个有序且可更改的集合。在 Python 中,列表用方括号编写。
-
通过引用索引号来访问列表项
-
更改特定项的值
-
遍历列表
-
in
-
列表长度
-
添加项
- append
- insert
-
删除项
- remove
- pop
-
复制
- copy
-
合并
- extend
-
列表方法
- sort
- reverse
代码例子
#List列表 - 是一种有序的可以更改的集合,列表中的元素可以重复
# 创建列表可以使用[] 或者 list()
# 创建空的列表
# nums = []
nums = list()
# print(nums)
#非空的列表
nums = [2,4,6,8,8]
print(nums) #[2, 4, 6, 8, 8] 存放有序,允许有重复的元素
ss = ['hello','python','web','web',20]
print(ss) #['hello', 'python', 'web', 'web', 20]
'''
列表每一个元素都分配一个整数,称为索引,左边从0开始(正索引),右边从-1开始(负索引)
['hello','python','web','web',20]
0 1 2 3 4
-5 -4 -3 -2 -1
'''
#使用[索引]访问列表中的元素
# print(ss[0])
# print(ss[-5])
# print(ss[-1])
#for in - 遍历列表
# for s in ss:
# print(s)
#len() - 获取列表长度
print(len(ss))
print(len([]))
#修改列表中的元素
ss[2]='java'
print(ss)
# in - 检查列表中是否包含给定的元素
print('java' in ss) #True
print('js' in ss) #False
print(type(ss)) #返回变量的类型 list
# + 列表拼接,生成新的列表
# print(id(ss)) # id() - 返回变量的内存地址
ss2=ss+[40,69]
print(ss)
print(ss2)
print(len(ss2))
# print(id(ss))
# append() 列表的末尾添加一个元素 - 追加
# print(id(ss)) # id() - 返回变量的内存地址
# ss.append([33,51])
# print(id(ss))
# print(ss)
# print(len(ss))
# extend() 列表末尾逐个添加给定集合中的元素 - 合并
# ss.extend([33,51])
# print(ss)
# print(len(ss))
#insert() 指定索引位置上插入一项
# ss.insert(1,[33,51])
# print(ss)
#print(ss[10]) #IndexError: list index out of range
#remove() 删除给定的一个元素,(如果有多个,只删除左边开始第一个)
# ss.append('web')
# print(ss)
# ss.remove('web')
# print(ss)
# ss.remove("js") #ValueError: list.remove(x): x not in list
#pop() 弹出指定位置的一个元素,并且返回弹出的元素 默认是最右边的元素
# print(ss)
# s = ss.pop(1) #参数指定位置(索引)
# print(s)
# print(ss)
# 新建变量指向的是同一个列表
# ss2 = ss
# print(id(ss))
# print(id(ss2))
# copy() - 复制,新建了一个列表,并且把原列表的元素复制进新的列表
# ss2 = ss.copy()
# print(id(ss))
# print(id(ss2))
# print(ss)
# print(ss2)
nums=[20,21,6,18]
#reverse - 列表元素反转
nums.reverse()
print(nums) #[18, 6, 21, 20]
# sort() - 列表中元素排序,升序排序
nums.sort()
print(nums)
# list*n - 列表元素复制n次 , 原来列表不变
print(nums*4)
# max() - 返回列表中最大的元素
# min() - 返回列表中最小的元素
# sum() - 返回列表中所有元素的和
print(max(nums),min(nums),sum(nums))
练习1
已知一个列表
lst = [1,2,3,4,5]
求列表的长度
判断6 是否在列表中
lst + [6, 7, 8] 的结果是什么?
lst*2 的结果是什么
列表里元素的最大值是多少
列表里元素的最小值是多少
列表里所有元素的和是多少
在索引1的位置新增一个的元素10
在列表的末尾新增一个元素20
练习2
lst = [1,2,3]
lst2 = [4,5,6]
不使用 + 号运算符,将lst2合并到lst的末尾,并思考,这个过程中,是否产生了新的列表
练习3
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
请写程序完成下列操作
在列表的末尾增加元素15
在列表的中间位置插入元素20
将列表[2, 5, 6]合并到lst中
移除列表中索引为3的元素
翻转列表里的所有元素
对列表里的元素进行排序,从小到大一次,从大到小一次
练习4
lst = [1, 4, 5, [1, 3, 5, 6, [8, 9, 10, 12]]]
不写任何代码,仅凭思考推理来回答下列问题
列表lst的长度是多少
列表lst中有几个元素
lst[1] 的数据类型是什么
lst[3]的数据类型是什么
lst[3][4] 的值是什么
如果才能访问到 9 这个值
执行lst[3][4].append([5, 6])后,列表lst的内容是什么,手写出来
lst[-1][-1][-2]的值是什么
lst[-2]的值是什么
len(lst[-1]) 的值是什么
len(lst[-1][-1])的值是什么
lst[-1][1:3] 的值是什么
lst[-1][-1][1:-2]的值是什么
练习. 求列表最大值
题目要求:实现函数get_max,函数最终返回列表lst的最大值,不要使用max函数
def get_max(lst):
"""
返回列表lst的最大值
:param lst:
:return:
"""
pass
lst = [4, 2, 1, 6, 7, 9]
max_value = get_max(lst)
print(max_value)
1.2 Tuple元组
- 元组是有序且不可更改的集合。在 Python 中,元组是用圆括号编写的。
- 通过引用方括号内的索引号来访问元组项
- 创建元组后,您将无法更改其值。
- 使用 for 循环遍历元组项
- in
- 元组长度
- 创建仅有一个元素的元组
- 合并两个元组
代码例子
#Tuple - 元组,是一种有序且不可更改的集合
#创建一个元组可以使用() 或者 tuple()
#空的元组
# nums=()
# nums = tuple()
# print(nums)
#非空的元组
# nums=(2,4,6,8,8)
# nums=tuple([2,4,6,8,8]) #新建一个元组,将列表中的元素依次存放进来
# print(nums) #(2, 4, 6, 8, 8) 存放有序 ,元素可以重复
ss=('python','java','web',20)
print(ss)
# in 检查元组是否包含给定的元素
print('js' in ss) #False
#len() 元组长度
print(len(ss))
#for in 遍历
for x in ss:
print(x)
#[索引]获取元组中的元素
print(ss[0])
print(ss[-1])
#元组中的元素不能重新赋值
#ss[0] = 'js' #TypeError: 'tuple' object does not support item assignment
# + 合并,生成新的元组,原来的元组是不变的
ss2=ss+(3,5)
print(ss)
print(ss2)
# *n 元素复制 原来的元组不变
print(ss*2)
# 下面创建的是一个int
# ts=(1)
# 创建仅有一个元素的元组
# ts=(1,)
# print(ts,type(ts))
#tuple->list
# ls = list((20,21,6,18)) #创建一个列表,将元组中的元素依次添加到列表中
# ls.sort()
# print(ls)
ts=('hello','python','java','web','js')
print(max(ts),min(ts))
# tuple用处
# 函数返回值用tuple存放
# 可变参数
def test(*args):
print(args)
test(2,5,3,4)
dd = ('python',[2,4],20)
print(dd[1][1])
dd[1][1]=33
print(dd)
# dd[1]=[2,33] #TypeError: 'tuple' object does not support item assignment
练习1
写出下面代码的执行结果和最终结果的类型
(1, 2)*2
(1, )*2
(1)*2
1.3 Set集合
-
集合是无序和无索引的集合。在 Python 中,集合用花括号编写。
-
使用 for 循环遍历
-
in
-
添加项
- add
- update
-
集合长度
-
删除
- remove
-
合并两个集合
- union
-
集合方法
- defference
- intersection
代码例子
# set - 集合是一组不能重复的元素的集合。集合是无序的,使用{}定义集合。
# set() - 创建一个空的set,不使用{}
# s = set()
# print(s,type(s))
# 包含元素的set 重复的元素保留一个,存放无序
# s = {'python','java','web','web'}
# print(s,type(s))
# 把一个列表元素存成一个set
s = set(['python','java','web','web']) #{'web', 'python', 'java'}
print(s)
#set 无法用[]获取元素
#print(s[0])
# for in 语句遍历
for c in s:
print(c)
# add() 增加元素
# s.add('php')
# s.add('java')
# print(s)
# remove() 删除给定的元素
# s.remove('java')
# print(s)
# pop() - 随机从set中删除一个元素
s.pop()
print(s)
set操作
#创建空的set
s = set()
# update() - 添加多个元素
s.update({100,99,95,94})
print(s)
s.update(['python','java'])
print(s)
# len() - 返回set中元素的个数
print(len(s))
s1 = set('apple')
print(s1)
s2 = set('banana')
print(s2)
# - difference 差集
print(s1-s2) #把s2中包含的元素从s1中删除
print(s1.difference(s2)) #把s2中包含的元素从s1中删除
print(s2.difference(s1)) #把s1中包含的元素从s2中删除
# symmetric_difference 对称求差别
print(s1.symmetric_difference(s2))
print(s2.symmetric_difference(s1))
# intersection() - 交集
print(s1.intersection(s2))
# union() - 并集
print(s1.union(s2))
练习
lst1 = [1, 2, 3, 5, 6, 3, 2]
lst2 = [2, 5, 7, 9]
哪些整数既在lst1中,也在lst2中
哪些整数在lst1中,不在lst2中
两个列表一共有哪些整数
1.4 Dictionary字典
-
字典是一个无序、可变和有索引的集合。在 Python 中,字典用花括号编写,拥有键和值。
-
通过在方括号内引用其键名来访问字典的项
-
通过引用其键名来更改特定项的值
-
使用 for 循环遍历字典
-
values()-返回字典的值
-
items()-返回键和值
-
in
-
字典长度
-
添加项
-
删除项
- pop
-
字典方法
- get
- keys
代码例子
#Dictionary - 字典
#用{}创建字典,键(key)和值(value)之间用冒号(:)分割,键值对之间用逗号(,)分割
d1 = {100:"hello","python":[2,4,6]}
print(d1,type(d1)) # dict-字典
#创建一个空的字典用dict()函数
d2 = dict()
print(d2,type(d2))
#{}创建空的字典
d3 = {}
print(d3,type(d3))
#创建字典
user={'username':'zhang','age':20}
print(user)
#[key]获取key对应的value
print(user['username'],user['age'])
#print(user['sex']) #KeyError: 'sex'
#新建一个键值对
user['sex']='男' #'sex'在字典中不存在
print(user)
#根据键修改值
user['age']=22 #'age'在字典中已存在
print(user)
# user['username']='xiaoming'
# user['age']=18
# user['sex']='女'
# print(user)
#update(dict) - 用给定的字典同时增加或修改原字典)
xm = {'username':'xiaoming','age':18,'no':1001}
user.update(xm)
print(user)
#同一个字典中键不能重复,不可变的类型(如:数字、字符串、元组)可以作为键
d3 = {'hello':100,'python':100,('java',):100} #列表是可变的,不能作为键
print(d3)
print(d3.get('age',20) ) #get() - 根据关键字获取值,但是关键字不存在,不报错,返回指定的值,默认返回None
#pop(key) - 根据键删除键值对
value = d3.pop('hello') #返回键对应的值,如果键不存在,抛出错误KeyError
print(value)
print(d3)
#clear() - 清空
d3.clear()
print(d3)
字典遍历
scores={'python':100,'java':100,'web':99}
scores['js']=98
print(scores)
#keys() - 获取键 ,返回的类型是dict_keys
print(scores.keys(),type(scores.keys()))
#list() - dict-keys -->list
ks = list(scores.keys() )
print(ks[0])
#values() - 获取值 ,返回dict_values
vs = scores.values()
print(vs,type(vs))
vs = list(vs)
print(vs)
# for in 语句遍历
for k in scores:
print(k,scores[k]) #字典中的键
# scores['php']=97
# scores['php']=0
# print(scores)
sc = scores.setdefault('php',0)
print(scores)
print(sc)
字典存放列表数据
names = ['zhang','lisi','xiaoming','zhao','liu']
scores = [95,88,99,90,95,10]
students={}
for i in range(0,len(names)):
students[names[i]]=scores[i]
print(students)
print(students['liu'])
#zip() - 拉链
z = zip(names,scores)
stu = dict(z)
print(stu)
#copy() - 拷贝
stu2 = stu.copy() #创建新的字典
# stu2 = stu # 不创建新的字典
print(stu,id(stu))
print(stu2,id(stu2))
#hash() - 哈希函数
# print(hash('zhang'))
# print(hash('zhang'))
# print(hash('lisi'))
# stu3={}
# stu4 = stu3.fromkeys(names) #创建一个新的字典并返回 把names中的元素作为键
# print(stu4)
# print(stu3.fromkeys(names,0)) #指定键对应的值,如果不指定,默认值是None
#items() - 返回dict_items
its = stu2.items()
print(its,type(its))
its = list(its) #[('zhang', 95), ('lisi', 88), ('xiaoming', 99), ('zhao', 90), ('liu', 95)]
it =its[0] #('zhang', 95)
print(it[0],it[1])
# in - 检查字典中是否有给定的键
print('zhou' in stu2) #False
print('lisi' in stu2) #True
#len(dict) - 返回字典中键的数量
print(len(stu2)) # 一个键值对算一个
练习
dic = {
'python': 95,
'java': 99,
'c': 100
}
用程序解答下面的题目
字典的长度是多少
请修改'java' 这个key对应的value值为98
删除 c 这个key
增加一个key-value对,key值为 php, value是90
获取所有的key值,存储在列表里
获取所有的value值,存储在列表里
判断 javascript 是否在字典中
获得字典里所有value 的和
获取字典里最大的value
获取字典里最小的value
字典 dic1 = {'php': 97}, 将dic1的数据更新到dic中
练习2. 求学生最高分数科目和分数
题目要求:实现函数get_max_score, 执行程序,最终输出: 英语 98
def get_max_score(score_dic):
"""
返回学生考试成绩的最高分的科目和分数
:param score_dic:
:return:
"""
pass
dic = {
'语文': 90,
'数学': 97,
'英语': 98
}
course, score = get_max_score(dic)
print(course, score)
1.5 案例
案例1:过滤掉列表[3, 9, -1, 10, 20, -2, ...] 中的负数
案例3:筛出集合{77, 89, 34, 20, 21...}中能被3整除的元素