Python数据类型上
前言介绍
首先介绍下Python的基本数据类型:
Python中有6中基本数据类型,其中有三种可变(list列表,set集合,dict字典),三种不可变(int类型,tuple元组类型,str字符串类型),其中各种数据类型表示方法如下:
‘’’
列表: []
元组: ()
字典:{}
集合:{}
集合是无序的
集合中的元素数唯一的
集合中的元素就可以用来作关系测试
‘’’
列表类型list
定义一个列表:
List=["语文","英语","物理","化学","历史", "语文","数学","英语","物理","语文","数学"]
切片
print(List[1],List[2]) #获取下标为1和2的元素
print(name[2:4]) #获取下标2到4之间的元素
print(name[-4:-2]) #反向切片(最后一个元素下标为-1)
print(name[5:]) #下表为0后边所有元素
#数学 英语
#['物理','化学']
#['英语', '物理']
#['语文', '数学', '英语', '物理', '语文', '数学']
列表插入
List.append("政治") #添加在末尾
List.insert(3,"高等代数") #指定位置插入
print(List)
#['语文', '英语', '物理', '化学', '历史', '语文', '数学', '英语', '物理', '语文', '数学', '政治']
#['语文', '英语', '物理', '高等代数', '化学', '历史', '语文', '数学', '英语', '物理', '语文', '数学', '政治']
列表修改、删除
List[3]="数学分析" #替换指定位置元素
print(List)
#['语文', '英语', '物理', '数学分析', '历史', '语文', '数学', '英语', '物理', '语文', '数学']
List.pop(1)
print(List) #抛出
#['语文', '物理', '化学', '历史', '语文', '数学', '英语', '物理', '语文', '数学']
a=List.pop(2)
print(a) #可打印
#化学
del List[3]
print(List)
#['语文', '物理', '历史', '数学', '英语', '物理', '语文', '数学']
查找、计数、清空
print(List.index("语文",3,-2)) #在某个区间内查找元素,输出元素下标
print(List.count("物理")) #输出元素个数
List.clear()
print(List)
:
#5
#2
#[]
顺序反转、合并
List.reverse()
print(List)
List_one=["2","a66","55","a5","2a","w","s","5","23","12"]
print(List.extend(List_one))
#['数学', '语文', '物理', '英语', '数学', '语文', '历史', '化学', '物理', '英语', '语文']
#['语文', '英语', '物理', '化学', '历史', '语文', '数学', '英语', '物理', '语文', '数学', '2', 'a66', '55', 'a5', '2a', 'w', 's', '5', '23', '12']
深浅拷贝
'''
拷贝:原则上就是把数据分离出来,复制其数据,并且以后修改互不影响。
**浅拷贝:copy.copy()**
数据半共享,复制其数据,但是有单独的地址存放(只拷贝数据的第一层,无法拷贝数据的第二层,所以,它的第二层依旧指向l1的内存,第二层数据内存共享,当修改第二层数据时,它也会随之改变)
**深拷贝:copy.deepcopy()**
数据完全不共享,复制器数据完完全全放在一个独立的内存,完全拷贝(完完全全的复制一份,不会因为数据的修改而变动,内存不共享)
import copy
List_two=["Python","C语言","JAVA","C#",["HTML","PHP",".NET"]]
List_three=List_two.copy() #只是拷贝了List_two的地址
List_four=copy.deepcopy(List_two) #拷贝的是List_two的内容
print(List_three)
print(List_four)
#['Python', 'C语言', 'JAVA', 'C#', ['HTML', 'PHP', '.NET']]
#['Python', 'C语言', 'JAVA', 'C#', ['HTML', 'PHP', '.NET']]
List_two[4][1]="CSS"
List_two[1]="Mysql"
print(List_three) #因为只是拷贝的地址,原内容改变,则拷贝内容也改变
print(List_four) #相当于一份新的内容,与原来的无关,则原内容不改变
#['Python', 'C语言', 'JAVA', 'C#', ['HTML', 'CSS', '.NET']]
#['Python', 'C语言', 'JAVA', 'C#', ['HTML', 'PHP', '.NET']]
'''
列表生成式
两种写法都可以:
print([i*i for i in range(10)]) #列表生成式
print(list(i**3 for i in range(10)))
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
集合类型set
set是一个无序不重复的元素集合
创建集合的方式:
方式一:
使用花括号{ }创建集合,传入集合元素。
注意:传入的元素对象必须是不可变的,即不能传入列表、字典等。
eg: myset = {‘A’,’X’,’W’,’Z’}
方式二:
使用set()函数创建集合
注意:使用set()函数将可迭代对象转换为集合。
关系测试(取交集)
Set1={1,2,3,4,5,6,7,8,9}
Set2={7,6,5,4}
print(Set1.intersection(Set2))
#{4, 5, 6, 7}
取并集
Set1={1,2,3,4,5,6,7,8,9}
Set2={2,5,99,35}
print(Set1.union(Set2))
#:{1, 2, 3, 4, 5, 6, 7, 8,99,35}
取差集(去掉1中存在的,而2中不存在的元素)
Set1={1,4,7,8,9}
Set2={11,58,99,250}
print(Set1.difference(Set2))
#{1, 4, 7, 8, 9}
判断子集
Set1={1,4,7,8,9,38,78}
Set2={11,58,99,250}
print(Set1.issubset(Set2))
#False
判断父集
Set1={1,2,3,4,5,6,7,8,9}
Set2={2,5,99,35}
print(Set1.issuperset(Set2))
#False
去对称差集(会去掉1和2中都存在的元素)
Set1={1,4,7,8,9}
Set2={11,58,99,250}
print(Set1.symmetric_difference(Set2))
#{1, 99, 58, 4, 7, 8, 9, 11, 250}
判断是否没有共同元素
Set1={99,88,77,0}
print(Set1.isdisjoint({0,10}))
#True
交集(&)、并集(|)、差集(-)、对称差集(^)
Set1={1,2,3,4,5,6,7,8,9}
Set2={7,6,5,4}
print(Set1 & Set2)
#{4, 5, 6, 7}
print(Set1 | Set2)
#{1, 2, 3, 4, 5, 6, 7, 8}
print(Set1 - Set2)
#{8, 1, 2, 3}
print(Set1 ^ Set2)
#{1, 2, 3, 8}
新增、删除元素
增加:
Set1={0,12,1,9,2,2,5,6,5,7}
print(Set1)
#{0, 1, 2, 5, 6, 7, 9, 12}
Set1.add(946) #增加单个
print(Set1)
#{0, 1, 2, 5, 6, 7, 9, 12, 946}
Set3={1,2,5,3,88,99} #合并连个列表
Set1.update(Set2)
print(Set1)
#{1, 2, 3, 4, 99, 38, 7, 8, 9, 5, 78, 88}
删除:
Set={1,4,2,5,6}
Set.remove(5)
print(Set)
Set.discard(5)
print(Set) #使用discard和remove都可以删除set当中的元素,区别就是remove的元素在set当中没有的话会报错,而discard不会。
print(Set.pop()) #随机删除,并打印删除元素
#{1, 2, 4, 6}
#{1, 2, 4, 6}
#1
字典类型dict
字典是另一种可变容器模型,且可存储任意类型对象。
字典是一系列键值对(key-value)。每个键都与一个值关联。字典使用花括号的标识{}
特点:具有极快的查找速度 用来编写搜索的最快方法
字典常操
创建字典
方式一
使用花括号{ }创建dict(xx,xx)
只要将字典中的一系列键和值按键值对的格式(key:value,…)传入花括号{ }中,并以逗号将各键值对隔开,即可实现创建字典。
注意:键(key)在字典中不允许重复,如果key重复,则最后出现的key-value对会覆盖前面相同的key。
方式二
使用dict函数创建
dict(**kwd)
dict([(两个元素),(两个元素),…])
#dict={key:"value"} #key--value形式
dict={1:"one",2:"two",3:"three",4:"four"}
字典的增删查改
dict={1:"one",2:"two",3:"three",4:"four"}
print(dict[3]) #直接按照key只查找
#three
dict[6]="six" #字典名[key]="value"
print(dict)
#{1: 'one', 2: 'two', 3: 'three', 4: 'four', 6: 'six'}
del dict
print(dict) #全部删除
#<class 'dict'>
a=dict.pop(2) #标准删除并抛出
print(dict)
print(a)
#{1: 'one', 3: 'three', 4: 'four'}
#two
dict.popitem() #随机删除
print(dict)
#{1: 'one', 2: 'two', 3: 'three'}
print(dict.get(3))
print(4 in dict) #判断字典中是否存在4这个键值
#three
#True
字典的打印、拼接
print(dict.values()) #打印所有值
#dict_values(['one', 'two', 'three', 'four'])
print(dict.keys()) #打印所有的键值
#dict_keys([1, 2, 3, 4])
dict1={1:"one",4:"four",6:"six"} #字典拼接
dict2={3:"three",2:"two"}
dict1.update(dict2)
print(dict1)
#{1: 'one', 4: 'four', 6: 'six', 3: 'three', 2: 'two'}
dict={1:"one",2:"two",3:"three",4:"four"} #打印所有项
print(dict.items())
#dict_items([(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')])
c=dict.fromkeys([2,5,1],"-+-+") #字典初始化
print(c)
#{2: '-+-+', 5: '-+-+', 1: '-+-+'}
'''fromkeys现象说明'''
c=dict.fromkeys([7,8,9],[1,{"a","N"},"hello"])
print(c)
#{7: [1, {'N', 'a'}, 'hello'], 8: [1, {'N', 'a'}, 'hello'], 9: [1, {'N', 'a'}, 'hello']}
d={3:"three",2:"two",4:"four",1:"one"} #字典的遍历
for i in d:
print(d[i])
#three
#two
#four
#one
dict_one={3:"three",2:"two",4:"four",1:"one"}
for k,n in dict_one.items(): #遍历key值和value值
print(tuple(n))
#3 three
#2 two
#4 four
#1 one
a=["key1","key2","key3"]
b=["A","B","C"]
print(dict(zip(a,b))) #将两个列表转化为字典
#{'key1': 'A', 'key2': 'B', 'key3': 'C'}