Python的基本数据类型
1、列表(list)
1、列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 比如JS中的数组, java中的数组等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型:
lst = ["张三",1,2,3,"李四"]
2、列表的增删改查
2.1、新增
lst = [] lst1 = ["王五","钱六"] lst.append("张三") #追加在最后 lst.insert(1,"李四") #根据下标添加元素 lst.extend(lst1) #将一个lst加在最后 #结果 ['张三', '李四', '王五', '钱六']
2.2、删除
lst = ['张三', '李四', '王五', '钱六'] lst.pop(1) #删除最后一个,也可以指定下标删除 lst.remove("王五") #删除指定元素 lst.clear() #清空集合
2.3、修改
lst = ['张三', '李四', '王五', '钱六'] lst[0] = "哈哈" #指定下标修改 lst[0:2] = ["ok","no"] #切片修改 lst[0:2:2] = ["娃哈哈"] #如果有步长,则需要指定对应的数量 #结果 ['娃哈哈', 'no', '王五', '钱六']
2.4、查询
lst = ['张三', '李四', '王五', '钱六'] for i in lst: print(i) #结果 张三 李四 王五 钱六
2.5、切片
lst = ['张三', '李四', '王五', '钱六'] #切片的用法 lst[start:end:step] step为步长,可以省略,默认为1,包括开头,不包括结尾 print(lst[0:2]) #['张三', '李四'] print(lst[0:3:2]) #['张三', '王五']
2.6、其他的方法
lst = ['张三', '李四', '王五', '钱六'] lst.count("张三") #查询出lst中的张三的个数 lst.sort() #排序,默认升序 #['张三', '李四', '王五', '钱六'] lst.sort(reverse=True) #倒序 #['钱六', '王五', '李四', '张三'] lst.reverse() #['钱六', '王五', '李四', '张三'] len(lst) #lst长度
2、元祖(tuple)
1、俗称不可变的列表,又被成为只读列列表, 元组也是python的基本数据类型之一, 用小括号括起来, 里里面可以放任何数据类型的数据, 查询可以,循环也可以, 切片也可以,但就是不能改,这里元组的不可变的意思是子元素不可变. 而子元素内部的子元素是可以变, 这取决于子元素是否是可变对象
tu = (1,[],2) tu[1].append("张三") #(1, ['张三'], 2)
2、如果只有一个元素,则需要在后面加一个逗号,否则他不是元祖
tu = (1,)
3、查询方法
for i in tu: print(i)
4、其他方法
tu = (1,2,3,["张三","李四"]) tu.index(3) #找出某个对象第一个匹配项的索引位置,如果这个对象不在元祖中会报一个异常。 len(tu) #计算长度 tu.count(1) #查询出现的次数
for num in range(10): #range可以帮我们获取到⼀一组数据. 通过for循环能够获取到这些数据
print(num)
3、键值对(dict)
1、字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成,在dict中key是唯一的, 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的,如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址而规定的.
2、已知的可哈希(不可变)的数据类型: int, str, tuple, bool,不可哈希(可变)的数据类型: list, dict, set
3、语法 :{key1: value1, key2: value2....}
4、新增
dic = {} dic.setdefault("name","李四") #如果没有相同的key,则会新增。否则不生效 dic["age"] = 20 #结果:{'name': '李四', 'age': 20}
5、删除
dic = {'name': '李四', 'age': 20, 'sex': '男', 'addr' : '山西', 'user' : 'admin', 'passwd' : 'admin'} dic.pop("name") #删除指定元素,不存在会报错 dic.popitem() #随机删除元素 del dic["sex"] #删除指定元素,不存在会报错 dic.clear() #清空dict
6、查询
dic = {'name': '李四', 'age': 20, 'sex': '男', 'addr' : '山西', 'user' : 'admin', 'passwd' : 'admin'} dic["name"] #如果name不存在,则报错 dic.get("name") #如果name不存在,则返回None dic.get("a","haha") #如果a不存在,则返回haha
7、其他操作
dic = {'name': '李四', 'age': 20, 'sex': '男', 'addr' : '山西', 'user' : 'admin', 'passwd' : 'admin'} dic.keys() #返回所有dict的key组成的list集合,不存在会返回空list dic.values() #返回所有dict的value组成的list集合,不存在会返回空list dic.items() #返回所有的键值对,格式为:[(),()],list中包含tuple类型 #上面的可以解构,如下 # a,b = [1,2] for key,value in dic.items(): print(key, value)
4、集合(set)
1、set集合是python的一个基本数据类型,一般不是很常用, set中的元素是不重复的,无序的,里面的元素必须是可hash的(int, str, tuple,bool),我们可以这样来记,set就是dict类型的数据但是不保存value, 只保存key,set也用{}表示
2、注意: set集合中的元素必须是可hash的, 但是set本身是不可hash的,set是可变的。
set1 = {'1','alex',2,True,[1,2,3]} # 报错 set2 = {'1','alex',2,True,{1:2}} # 报错 set3 = {'1','alex',2,True,(1,2,[2,3,4])} # 报错
3、set中的元素是不重复的, 且无序的,使用这个特性我们可以去重
s = {"周杰伦", "周杰伦", "周星星"} print(s) #结果:{'周星星', '周杰伦'}
set = {1,"name",True,False,(1,2,3)} #结果{False, 1, 'name', (1, 2, 3)},因为1和True是一样的,所以被去重
4、新增
set = {1,"name",True,False,(1,2,3)} set.add("abs") #添加abs到集合,如果存在则不加 set.update("cd") #会把c和d分开加入到set中 set.update(["e","f"]) #会把e和f分开加入到set中 #结果 {False, 1, 'd', 'e', 'abs', (1, 2, 3), 'c', 'f', 'name'}
5、删除
set = {1,"name",True,False,(1,2,3)} set.pop() #随机删除一个元素 set.remove("name") #直接删除name,如果name不存在,则会报错 set.clear() #清空set,打印出来是set(),因为要和dict区分
6、修改(先删除,后新增)
7、其他操作
7.1、交集
# 交集 # 两个集合中的共有元素 print(s1 & s2) # {'⽪皮⻓长⼭山'} print(s1.intersection(s2)) # {'⽪皮⻓长⼭山'}
7.2、并集
# 并集 print(s1 | s2) # {'刘科⻓长', '冯乡⻓长', '赵四', '⽪皮⻓长⼭山', '刘能'} print(s1.union(s2)) # {'刘科⻓长', '冯乡⻓长', '赵四', '⽪皮⻓长⼭山', '刘能'}
7.3、差集
# 差集 print(s1 - s2) # {'赵四', '刘能'} 得到第⼀一个中单独存在的 print(s1.difference(s2)) # {'赵四', '刘能'}
7.4、反交集
print(s1 ^ s2) # 两个集合中单独存在的数据 {'冯乡⻓长', '刘能', '刘科⻓长', '赵四'} print(s1.symmetric_difference(s2)) # {'冯乡⻓长', '刘能', '刘科⻓长', '赵四'}
7.5、子集
print(s1 < s2) # set1是set2的⼦子集吗? True print(s1.issubset(s2))
7.6、超集
print(s1 > s2) # set1是set2的超集吗? False print(s1.issuperset(s2))