3.Python数据类型
Python的数据类型分为数值型和字符型
数值型:
- 整数:整数的类型用int来表示。python可以处理任意大小的整数,当然可以包括负整数。
比如:
字符串整数可以通过int()强转成整数类型。
比如:
也可以用int()将浮点数强转为整数,强转是不四舍五入的
比如:
如果要将字符型的浮点数强转成整数需要先用float()把这个字符串强转成浮点数,在用int()强转成整数
比如:
- 浮点数:
浮点数也就是小数,类型用float来表示。
比如:
注:整数和浮点数在计算机内部的存储方式是不同的,整数的计算是永远精确的(包括除法),而浮点数运算则可能出现误差
比如:
可以看到浮动运算会有一定的误差,在使用的时候我们一般先将浮点数成10的N次方,将它变成整数,然后进行运算,再除以10的N次方,这样可以保证数据的准确性。
- 布尔型:
布尔值的类型用bool来表示
比如:
布尔的值只有两个:Ture和False
注:
所以数据都自带布尔值
True是数值1;False是数值0,空字符串,None,空列表、空元组、空字典也都当False处理。(所以布尔型也属于数值型)
字符型:
- 字符串常用单引号,双引号或者三引号括起来。类型用str来表示。
单引号或者双引号,可以用转义字符来标识,三引号可以直接写多行,
这样回车换行的话前面就变成三个点,最后用三引号结束就可以了
比如:
- 常用的转义字符:\n表示换行,\t表示制表符,\\表示\
如果不想用转义字符,可以用r''这种方式来写,这样内部的内容就不需要转义了
- 字符型有一个特性是一旦创建就不可改变。
举个例子:当你创建了一个字符串变量a,然后给它赋值为ABC,python解释器就会创建一个a变量,然后再创建一个空间存储ABC,再让a变量指向这个空间的地址。当你改变一个字符串的时候,它就会再开辟一个空间来存储这些字符 串内容,然后让a变量指向新的字符串空间地址
例如:
a = "地址一" print(id(a)) # 2907158346448 a += "二" print(a) # 地址一二 print(id(a)) # 2907157753504
- 字符串可以通过下标取值,但是不可以修改,否则会报错
由于python的字符串类型是str,在内存中是用Unicode码表示的,一个字符对应若干个字节,如果要在网上传输或者保存到硬盘上,就需要将str变成以字节为单位的bytes,python对bytes类型的数据用带b的前缀的单引号,或者双引号表示。
可以通过:字符串.encode("编码格式")转换成对应的编码表示
可以通过:字符串.decode("编码格式")将编码转换为对应的字符串
列表:
列表是一种用中括号([])包裹起来的有序集合,用list来表示,它可以存储任意的类型的数据。
列表在内存中的表现是链表形式存储,即每个元素存储的地方可以能连续,每个元素的后面都会存放一个内存地址来找到下一个元素的位置。
所以列表元素是可以被修改的,可以通过下标来获取元素,取最后一个可以用-1。如果超过下标的值会报错。
列表方法:
# append() 将参数作为元素添加到列表中去 a = [1, 2] a.append([3, 4]) print(a) # [1, 2, [3, 4]]
# extend() 将参数列表逐个添加到列表中去 a = [1, 2] a.extend([3, 4]) print(a) # [1, 2, 3, 4]
# insert(index, object) 在指定位置index前插入元素object a = [1, 2, 3, 4] a.insert(1, [3, 4]) print(a) # [1, [3, 4], 2, 3, 4]
# 修改元素有两个方法,一个是通过下标,一个是通过切片(切片是左闭右开区间) a = [1, 2, 3, 4] # 方式一:下标修改 a[1] = "中" print(a) # [1, '中', 3, 4] # 方式二:切片修改,也可以实现删除 a[2:3] = ["天", "下", "大", "同"] # [1, '中', '天', '下', '大', '同', 4] print(a) a[2:3] = [] print(a) # [1, '中', '下', '大', '同', 4]
# a.index(x,begin,.end) # 在a中的begin和end之间,查找字符x的下标,没有会报错 a = [1, 2, 3] print(a.index(2)) # 1
列表.count(x, begin, end) # 查询x在列表中的个数 del 列表[下标值] # 根据下标进行删除 列表.pop() # 删除最后一个元素,也可以针对指定的下标删除,会返回删除的内容 列表.remove(元素) # 将指定的元素从列表中删除 列表.sort(reverse=True) # sort方法是将列表按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。 列表.reverse() # reverse方法是将list逆置。]
元组:
元组和列表类似,也是一种有序的,可以存储任意类型数据的容器,它使用括号(())包裹,用tuple来表
需要注意的是:元组一旦初始化就不可以修改。或者说它的第一层不可以改变,但它的元素中如果包括容器,那个容器里面的内容就可以修改。
比如:
a = (1, 2, 3, [4, 5]) a[3][1] = 9 print(a) # (1, 2, 3, [4, 9])
注:元组在使用的时候,很容易和方法混淆,所以在最后一个元素的后面一般加一个逗号,这样也不报错,建议加上,
查的方式和列表一样,只是记住不可以删除
集合:
集合表示为set,很类似list列表,但它是不同元素(必须是不可变类型)组成的,无序的容器,它使用花括号({})包裹,set和字典类似,也是一组key的集合,但是不存储value,由于key不能重复,所以,在集合中没有重复的key。
比如:
集合常用方法:
两个集合求交集:集合1 .intersection(集合2)或者集合1 & 集合2 两个集合求并集:集合1 union(集合2)或者集合1 | 集合2 两个集合求差集:集合1.difference(集合2)或者集合1 - 集合2 #集合1中的那个成员不在集合2中的返回 两个集合交叉补集:集合1 ^集合2 #并集减去交集
字典:
字典表示为dict,使用键值对的形式来存储数据的,使用的时候用花括号({})来对这些键值对进行封装,而且内部也是无序存储的。相对于list来说,字典的查询速度快,不会随着key的增加而变慢,但是需要大量的内存。这个通过key计算位置的算法被称为哈希算法。
如下:
注:键可以使用:元组,数字,字符串,如果是布尔值,会忽略,如果是字典或者列表,会直接报错。
如果键重复,只保留最后一个
字典常用方法:
# 添加一个键值对,直接用:字典名["键名"] = 值 a = {"name": "张三", "age": 18, "sex": "男"} a["address"] = "北京" print(a)
# 字典名.keys() 返回字典所有key,并放在一个类似列表的dict_keys类中 # 字典名.values() 返回字典所有value,并放在一个类似列表的dict_values类中 # 字典名.items() 返回所有key和values,所有的键值对分别构成一个元组,并放在一个类似列表的dict_values类中 a = {"name": "张三", "age": 18, "sex": "男"} print(a.keys()) print(type(a.keys())) print(a.values()) print(type(a.values())) print(a.items()) print(type(a.items())) # 注:可以在for循环中用拆包的方式分别获取key和value值
# 删除一个键值对可以用:del 字典名["键名"] # 删除字典则是:del 字典名 # pop也可以删除一个键值对:字典名.pop(键名,参数二),如果没有对应的键,返回第二个参数,不写的话会直接报错 # 随机删除一个键值对:字典名.popitem() # clear是清空字典 a = {"name": "张三", "age": 18, "sex": "男"} del a["name"] print(a) # {'age': 18, 'sex': '男'} print(a.pop("hobby", "没有")) a.popitem() # {'sex': '男'} print(a) a.clear() print(a) # {} del a print(a) # a被删除,not defined
其他:
di.setdefault("k111","123") # 设置值,如果键存在,则返回原有值,如果不存在,则将第一个参数作为键,第二个参数作为值插入到字典中,并返回值
di.update({"k1":"111","k2":"324"}) # 设置值,如果已经存在则覆盖,不存在则填入,参数中也可以用k1=23,k2="daf"这种格式
根据序列创建字典,di.fromkeys({"k1","k2","k3"],123) # 参数中,第一个列表是所有的key,第二个是指定统一的val