Python的核心数据类型
- 列表
1.列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)
2.列表是写在方括号 [ ] 之间、用逗号分隔开的元素列表。
3.列表索引值从0开始,-1为从末尾的开始位置。
4.列表可以使用+操作符进行拼接,使用*表示重复。
list1=[] #定义一个空的列表
list2=[1,2,"小明","小红"] #列表中可以存储混合类型
#使用for循环打印列表
nameList=["小张","小李","小马"]
for name in nameList:
print(name)
#使用whlie循环打印列表
i=0
while i<len(nameList)
print(nameList(i))
i+=1
列表的常用操作
操作名称 | 操作方法 | 举例 |
---|---|---|
访问列表中的元素 | 通过下标直接访问 | print(list1[0]) |
列表的切片 | 使用 [: :] | list[2:5:2] |
遍历列表 | 通过for循环 | for i in list1: print(i) |
【增】新增数据列表尾部 | 使用append | list1.append(5) |
【增】列表的追加 | 使用extend方法 | list1.extend(list2) |
【增】列表数据插入 | insert方法 | list1.insert(1,3) |
【删】列表的删除 | del:通过索引删除指定位置的元素 remove:移除列表中指定的第一个匹配值。如果没有找到,会抛异常。 | del list[0] list1.remove |
【删】弹出列表尾部的元素 | 使用pop | list1.pop() |
【改】更新列表中的数据 | 通过小标原地修改 | list[0]=8 |
【查】列表成员关系 | in、not in | 2 in list1 |
列表的加法操作 | + | list3=list1+list2 |
【排】列表的排序 | sort方法 | list1.sort() |
【排】列表的反转 | reverse | list1.reverse() |
获取列表的长度 | len() | |
获取列表元素最大值 | max() |
1.增加append()、extend()、insert()
# 1
a=[1,2]
b=[3,4]
a.append(b) #将列表当做一个元素添加的a列表中
print(a)
#输出结果为:[1, 2, [3, 4]]
#2
a=[1,2]
b=[3,4]
a.extend(b) #将b列表中的每个元素逐一追加到列表中
print(a)
#输出结果为:[1, 2, 3, 4]
#3
a=[0,1,2]
a.insert(1,3) #第一个变量表示小标,第二个表示元素(对象)
print(a)
#输出结果为:[0, 3, 1, 2]
2.删 [del] [pop] [remove]
print("删除前:")
a=["a","b","c","d","b"]
for name in a:
print(name)
#del a[2] #直接指定下标在指定位置删除一个元素
#a.pop() #弹出末尾最后一个元素
a.remove("b") #直接删除指定内容的元素,若遇到重复的数据,删除第一个
print("删除后:")
for name in a:
print(name)
# del输出结果:删除前:abcdb 删除后:abdb
# pop输出结果:删除前:abcdb 删除后:abcd
# remove输出结果:删除前:abcdb 删除后:acdb
3.改
print("修改前:")
a=["a","b","c","d"]
for name in a:
print(name)
a[0]="AOA" #修改指定下标的元素内容
print("修改后:")
for name in a:
print(name)
#输出内容为:修改前:abcd 修改后:AOAbcd
4.查 :in, not in
namelist=["小明","小田","小红"]
findName=input("亲输入你要查找的学生姓名:")
if findName in namelist:
print("在学院名单中找到了相同的名字!")
else:
print("没有找到!")
'''
输出内容:亲输入你要查找的学生姓名:小王
没有找到!
'''
例题
'''
1、products = [["iphone", 6999], ["MacPro", 14880], ["小米", 2499], ["Coffee", 31], ["Book", 60], ["Nike", 699]],需打印成二维表样式。
2、根据上面的products列表写一个循环,不断询问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购买商品列表。
'''
#建一个products列表
products = [["iphone", 6999], ["MacPro", 14880], ["小米", 2499], ["Coffee", 31], ["Book", 60], ["Nike", 699]]
print("-"*10,"产品列表","-"*10)
i=0 #作为商品的显示序列号
for product in products: #使用for循环打印出列表
print(i,end="\t") #输出序列号
for price in product:
print("\t", price, end="\t") #输出列表
i+=1 #序列号自增1
print()
j=1
shop=[] #新建一个列表
while j==1: #判断j是否等于1,不等于1就退出循环
pd = input("请输入要购买的产品(输入q退出):")
if pd == "Q" or pd== "q": #判断用户输入的值,如果是“q”,直接退出
print("已退出")
j = 0 #用户输入q,j变成0,循环结束
else:
try: #使用异常捕获,若输入>0 and <5 的值则提示报错
if int(pd) >= 0 or int(pd) <= 5: #判断用户输入的值是否在产品列表里
shop.append(products[int(pd)]) #向shop列表里面添加购买的产品
j = 1
except:
print("输入异常,请重新输入!")
break #输入异常,直接退出程序
print()
print("-"*10,"购物车","-"*10)
s=1
for product in shop:
print(s,end="\t") #输出购物车序号从
for price in product:
print("\t", price, end="\t") #输出购物车产品
s+=1
print()
元组(Tuple)
元组内的元素不能被修改.
Tuple写在小括号里,用逗号分隔
- 增加:使用“+”,将两个元组进行连接,形成一个新的元组
- 删除:直接 使用 “del(元组名)” 进行删除,不能进行单个元素的删除
- 查找:元组名[开始下标:结束下标] #左闭右开,从开始下标查找至结束下标的前一个元素全部显示。
- 元组名[-1] #显示最后一个元素,不会报错
tup1=() #创建空元组
print(type(tup1)) #<class 'tuple'>
#tup2=(50) #<class 'int'>
tup2=(50,) #<class 'tuple'>
print(type(tup2))
tup3=("AOA","OAO",2000,2020,3030,4040)
print(tup3[0]) #输出:AOA
print(tup3[-1]) #输出:2020 访问最后一个元素
print(tup3[1:5]) #输出:('OAO', 2000, 2020, 3030)
#左闭右开,进行切片
字典(dict)
字典是无序的对象集合,使用键-值存储,具有极快的查找速度
键必须使用不可变类型。
同一个字典中,键必须是唯一的。
说明:
1.字典和列表一样,可以存储多个数据
2.列表中找某个元素是根据下标进行的
3.字典中找某个元素是根据“键”
操作名称 | 操作方法 | 举例 |
---|---|---|
访问字典中的元素(1) | 通过key访问,key不存在会抛异常 | Info[“小明”] |
访问字典中的元素(2) | 通过get方法,不存在返回none,不会抛异常 | Info.get([“小明”]) |
遍历字典1 | 通过for循环,只能获取可key | For key,val in info: Print(key,info[key]) |
遍历字典2 | 配合items方法,获取key和val | For key,val in info.items(): Print(key,val) |
直接获取所有key和val | 使用keys和values方法 | Info.values() Info.keys() |
修改val | 直接通过key修改 | Info[‘age’]=18 |
新增键值对 | 直接新增 | Info[‘hobby’]=’eat’ |
元素删除 | 通过key删除 | Del info[‘key’] |
元素弹出 | 通过pop方法 | Info.pop(“key”) |
判断key是否存在 | In | “key” in info |
合并字典 | Update | Info.update(info) |
把两个列表转为字典 | Info+zip方法 | info(zip(list1,list2)) |
把一个嵌套列表转为字典 | Dict方法 | Info=dict([[‘key’,’value’]]) |
清空字典内的元素 | Clear方法 | Info.clear() |
其他类型对象转换为字典 | Dict() | Dict([(1,2),(2,3)]) |
查看
info={"name":"吴彦祖","age":18} #字典的定义
#直接使用key查找
print(info["gender"]) #获取不存在的key,直接报错
#Get方法找不到元素不会报错,可以设置默认值。
print(info.get("age","20")) #获取不存在的key,获取到空内容,不会出现异常
print(info.get("gender","m")) #若info中不存在gender键,就返回默认值 m
1.增:
newID=input("请输入新学号:")
info["id"]=newID
print(info["id"])
'''
输出:
请输入新学号:15
15
'''
2.删
#del
print("删除前:%s"%info["name"])
del info["name"]
print("删除后:%s"%info["name"])#删除字典后访问,会报错
#clear 清空
print("删除前:%s"%info)
info.clear()
print("删除后:%s"%info)
'''
输出:
删除前:{'name': '吴彦祖', 'age': 18}
删除后:{}
'''
3.改
info["age"]=20 #直接覆盖先前的数据
4.查
print(info.keys()) #得到所有的键(列表)
print(info.values()) #得到所有的值(列表)
print(info.items()) #得到所有的项(列表),每个键值对都是一个元祖
'''
输出:
dict_keys(['name', 'age'])
dict_values(['吴彦祖', 18])
dict_items([('name', '吴彦祖'), ('age', 18)])
'''
5.遍历所有的值
for value in info.values():
print(value)
for key in info.keys():
print(key)
for key,value in info.items():
print("key=%s,value=%s"%(key,value))
#使用枚举函数,同时拿到列表中的下标和元素内容
mylist=['a','b','c','d']
for i,x in enumerate(mylist):
print(i+1,x)
'''
输出:
1 a
2 b
3 c
4 d
'''
集合(set)
- Set和dict类似,也是一组key 的集合,但不存储value。由于可以不能重复,所以在set 中没有重复的key
- Set是无序的,重复元素在set中自动被过滤。
- Set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义
操作名称 | 操作方法 | 举例 |
---|---|---|
遍历集合 | 通过for循环 | For i in set1: Print(i) |
更新集合 | Update方法 | Set1.update(set2) |
想集合添加新元素 | Add方法 | Set1.add(5) |
移除集合中的元素 | Remove方法 | Set1.remove(5) |
弹出元素 | Pop方法 | Val=set.pop() |
清除元素 | Clear方法 | Set1.clear() |
删除集合 | Del方法 | Del set1 |
list = ["a","a","b","c","d","c"] #新建一个list列表
print("\n去重前:%s"%list)
list = set(["a","a","b","c","d","c"]) #使用集合去除list中重复的数据
print("去重后:%s"%list)
'''
输出:
去重前:['a', 'a', 'b', 'c', 'd', 'c']
去重后:{'a', 'c', 'd', 'b'}
'''
小结
是否有序 | 是否可变类型 | |
---|---|---|
列表 [ ] | 有序 | 可变 |
元祖 ( ) | 有序 | 不可变 |
字典 { } | 无序 | Key不可变,value可变 |
集合 { } | 无序 | 可变类型(不重复) |