1.列表
变量可以存储一个元素,而列表是一个大容器,可以存储多个元素,程序可以方便的对这些数据进行整体操作.
#第一种创建方式,使用“[]"
lst1 = ['hello','world',98]
#第二种创建方式,使用内置函数list()
lst2 = list(['hello','world',98])
一些性质:列表可以存储重复数据
列表可以存储不同类型的数据
根据需要动态分配和回收内存
1).index()获取列表中指定数据的索引,如果列表中有相同元素,只返回列表中相同元素的第一个的索引.
lst1 = ['hello','world',98,'hello']
print(lst1.index('hello'))
结果为:0
index()可以在指定范围内查找元素的索引.
lst1 = ['hello','world',98,'hello']
print(lst1.index('hello',1,4))
结果为:3
2).获取列表中的单个元素:
lst1 = ['hello','world',98,'hello','world',234]
print(lst1[2])
print(lst1[-3])
结果:
3).列表的切片:获取列表中的多个元素.
lst = [10,20,30,40,50,60,70,80]
lst1 = lst[1:6:1]
lst2 = lst[1:6:2]
lst3 = lst[::2]
print("原列表lst",id(lst))
print("列表lst1",id(lst1))
print("列表lst2",id(lst2))
print(lst1)
print(lst2)
print(lst3)
结果:
通过结果知道,切片后得到的列表是一个新的列表,因为id变化了.
列表切片负索引时:
lst = [10,20,30,40,50,60,70,80]
lst1 = lst[::-1]
lst2 = lst[6::-2]
print(lst1)
print(lst2)
结果:
4).判断指定元素是否在列表中
lst = [10,20,30,40,50,60,70,80]
print(10 in lst)
print(15 not in lst)
结果:
5).列表元素的遍历
lst = [10,20,30,40,50,60,70,80]
for item in lst:
print(item)
结果:
6).列表元素的增加操作
四种方法.
lst = [10,20,30]
#向列表末尾增加一个元素
print("添加元素前的id",id(lst))
lst.append(100)
print(lst)
print("添加元素后的id",id(lst))
#在列表末尾添加一个或者多个元素
lst1 = ["hello","world"]
lst.extend(lst1)
print(lst)
#在列表的任意位置插入一个元素
lst.insert(1,50)
print(lst)
#在列表的任意位置添加至少一个元素
lst2 = [True,False,"Hello"]
lst[1:]=lst2 #相当于后面的砍掉不要了,用lst2接上
print(lst)
结果:
注:增加元素,列表id不变.
7).列表元素的删除操作
lst = [10,20,30,40,50,60,30]
#remove方法
lst.remove(30) #若移除的元素有相同元素,则移除前面的一个
print(lst)
#pop方法
lst.pop(1)
print(lst)
lst.pop() #不指定索引位置,则移除最后一个元素
print(lst)
#切片删除方法,删除至少一个元素,将产生一个新的列表对象
new_list = lst[1:3]
print(new_list)
#clear,可以清楚列表中的所有元素
lst.clear()
print(lst)
#del语句可以将整个列表对象删除
del lst
结果:
8).列表元素的修改
lst = [10,20,30,40,50,60,30]
lst[2] = 100
print(lst)
print(id(lst[1]))
print(id(lst[2]))
lst[1:3] = [300,400,500,600]
print(lst)
结果:
9).列表的排序
列表方法:.sort()
lst = [10,20,30,40,50,60,30]
print("排序前的列表",lst,id(lst))
lst.sort()
print("排序后的列表:",lst,id(lst))
lst.sort(reverse=True) #降序排序.reverse的值默认为False
print(lst)
结果:
注:不产生新的列表对象.
内置函数:sorted()
lst = [10,20,30,40,50,60,30]
print("排序前的列表",lst)
new_list = sorted(lst)
print("排序后的列表:",new_list)
desc_list = sorted(lst,reverse=True)
print("排序后的列表:",desc_list)
结果:
注:产生新的列表对象.
10).列表生成式
lst = [i*i for i in range(1,10)]
print(lst)
结果:
练习:列表中的元素的值为2,4,6,8,10.
lst = [i*2 for i in range(1,6)]
print(lst)
总结一下关于列表的知识点:
2.字典
python内置数据结构之一,与列表一样是一个可变序列.以键值对的方式存储数据,字典是一个无序的序列.
注:python中的字典是根据key查找value所在的位置.
1).字典的创建
# 使用{}创建
scores = {'张三':100,'李四':98,'王五':99}
print(scores)
print(type(scores))
#第二种,使用dict()创建
student = dict(name = 'jack',age = 20)
print(student)
student1 = dict(nme = 250,age = 20)
print(student1)
#创建空字典
d = {}
print(d)
结果:
2).从字典中获取元素
scores = {'张三':100,'李四':98,'王五':99}
#第一种方式,使用[]
print(scores["张三"])
#第二种方式,使用get()方法
print(scores.get("张三"))
print(scores.get("张五"))
print(scores.get("张五",999)) #字典中不存在该元素时,返回999.
结果:
3).字典的一些操作
key的判断:
scores = {'张三':100,'李四':98,'王五':99}
print("张三" in scores)
结过为:True
增加,删除,修改:
scores = {'张三':100,'李四':98,'王五':99}
#删除指定的键值对
del scores["张三"]
print(scores)
#新增元素
scores['陈六'] = 88
print(scores)
#修改元素
scores['陈六'] = 86
print(scores)
结果:
4).获取字典视图操作
scores = {'张三':100,'李四':98,'王五':99}
#获取所有的键
keys = scores.keys()
print(keys)
print(type(keys))
print(list(keys)) #可转为列表
#获取所有的值
values = scores.values()
print(values)
print(type(values))
print(list(values)) #可转为列表
#获取素有的键值对
items = scores.items()
print(items)
print(list(items)) #可转为列表
结果:
5).字典元素的遍历
scores = {'张三':100,'李四':98,'王五':99}
for item in scores:
#获取键值
print(item,scores[item],scores.get(item))
结果:
字典的一些特点:
6).字典生成式
内置函数zip():用于将可迭代对象作为参数,将对象中对应的元素打包成一个元组.然后返回由这些元组组成的序列.
items = ["Fruits",'BOOKs',"Others"]
prices = [93,78,80,96,100]
lst = zip(items,prices)
print(list(lst))
d = {item.upper():price for item,price in zip(items,prices)}
print(d)
结果:
关于字典的知识点的总结:
3.元组
python内置的数据结构,不可变序列.不可以对其中元素进行增、删、改.
注:列表和字典是可变序列.
1).元组的创建方式
#第一种方式,使用()
t1 = ("Python","hello",98)
print(t1)
print(type(t1))
t11 = "Python","hello",98,"world"
print(t11)
#第二种方式,使用功内置函数tuple()
t2 = tuple(("Python","hello",98))
print(t2)
结果:
注:元组的创建不能没有逗号.
t1 = "python",
print(t1)
t2 = ("python",)
print(t2)
t3 = ("Python")
print(type(t3))
#空元组
t4 = tuple()
print(t4)
t5 = ()
print(t5)
print(type(t5))
结果:
一些关于元组的其他内容:
t = (10,[20,30],40)
print(t)
print(id(t[1]))
t[1].append(100)
print(t)
print(id(t[1]))
结果:
2).元组的遍历
t = ("python","world",98)
for item in t:
print(item)
结果:
4.集合
可变类型的序列.
1).集合的创建
#第一种方式,使用{}
set1 = {2,3,4,6,7,7} #集合中的元素不可重复
print(set1)
#第二种方式,使用内置函数set()
set2 = set(range(6))
print(set2)
print(set([1,2,3,5]))
print(set((1,2,6,5))) #集合元素无序
print(set("Pytohn"))
print(set({4,5,"py"}))
#空集合
print(set())
print(type({})) #不可以用{}定义空集合
结果:
2).集合的相关操作
增加元素:
set1 = {10,20,30,40,60}
# 判断元素是否在集合中
print(10 in set1)
#使用add添加元素
set1.add(80)
print(set1)
#使用update一次性添加多个元素
set1.update({100,200,300})
print(set1)
set1.update([100,200,300])
print(set1)
结果:
删除元素:
set1 = {10,20,30,40,60}
#remove方法,没有该元素则报错
set1.remove(20)
print(set1)
#discard方法,指定元素不存在不会报错
set1.discard(100)
print(set1)
#pop方法
set1.pop() #pop没有参数
print(set1)
#clear方法,清空集合
set1.clear()
print(set1)
结果:
3).集合之间的关系
set1 = {10,20,30,40,60}
#两个集合是否相等
set2 = {20,10,30,60,40}
print(set1==set2)
#一个集合是否是另一个集合的子集
set3 = {10,30}
print(set3.issubset(set1))
#一个集合是否是另一个集合的超集
print(set1.issuperset(set3)) #若集合A是集合B的子集,则集合B是集合A的超集
print(set2.issuperset(set3))
#两个集合是否有交集
print(set3.isdisjoint(set1)) #有交集为False
set4 = {50,99.5}
print(set4.isdisjoint(set1)) #没有交集为True
结果:
4).集合的运算
set1 = {10,20,30,40,60}
set2 = {10,20,100}
#求交集
print(set1.intersection(set2))
print(set1 & set2)
#求并集
print(set2.union(set1))
print(set1 | set2)
#求差集
print(set1.difference(set2))
print(set1 - set2)
#求对称差集
print(set1.symmetric_difference(set2))
print(set1 ^ set2)
#集合的运算不影响原集合
print(set1)
print(set2)
结果:
5).集合生成式
注:元组没有生成式.
set1 = {i*i for i in range(6)}
print(set1)
结果:
元组合集合的总结:
python数据结构的总结:
注:元组的创建不能少逗号,而不是括号.