python数据类型
python数据类型
一、数值型
二、字符型
三、容器型数据类型
数值型
1、整型
x = 3 print(id(x)) x = 5 print(id(x)) # id(): 返回一个整数,代表变量在内存中的地址 # 以上两个id返回的值明显不一样,说明变量值的地址是不一样的
2、浮点型
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型
注: 浮点数的取值范围和精度一般无限制,但是浮点数运算可能存在误差,也就是可能有不确定尾数
x = 2.23 print(x) d = 4.3 c = d-x print(c)
3、布尔型
布尔数据类型,简称布尔类型,在 Python 中用 `bool`表示。 bool 类是 int 类的子类。 布尔类型提供了两个布尔值来表示真(对)或假(错),在 Python 中分别用 `True`(真或对)或`False`(假或错)来表示。
print(True) # True 首字母要大写 print(False) # False 首字母要大写 print(type(True)) # 查看 True 的类型 print(type(False)) # 查看 False 的类型
结果:
True False <class 'bool'> <class 'bool'>
字符型
1.字符串的表示
(1)用单引号、双引号或三引号括起来的符号系列称为字符串, 并且单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串
1 "wyb", 'Hello, World', "python", '''Tom said, "Let's go"'''都是字符串
(2)空串表示为'', ""
1 # 下面是空串: 2 msg = '' 3 name = ""
(3)三引号表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释
1 msg = ''' 2 我是谁 3 我在哪 4 我在干什么 5 ''' 6 print(msg) # 字符串换行
1 ''' 2 三引号中可以写多行注释 3 这里可以写多行注释 4 '''
(4)不加引号的字符串会被系统认为是变量
>>> name = jack Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'jack' is not defined >>> jack = "wyb" >>> name = jack >>> name 'wyb'
字符串常用方法
(1)字符串拼接:
+: 直接将两个字符串相加 *: 字符串复制多次
join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
1 >>> name = "wyb" 2 >>> age = "21" 3 >>> name + age 4 'wyb21' 5 >>> name*3 6 'wybwybwyb'
1 >>>''.join("python") 2 'python' 3 >>>'123'.join("python") 4 'p123y123t123h123o123n'
注: 字符串只能与字符串进行拼接,不能与其他数据类型一起拼接!
1 >>> name = "wyb" 2 >>> age = 21 3 >>> name + age 4 Traceback (most recent call last): 5 File "<stdin>", line 1, in <module> 6 TypeError: must be str, not int
(2)大小写:
capitalize() 将字符串的第一个字符转换为大写
swapcase() 将字符串中大写转换为小写,小写转换成大写
upper() 转换字符串中所有小写字母为大写
lower() 转换字符串中所有大写字符为小写
title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写
>>> s = "python web framework" >>> s.capitalize() 'Python web framework' >>> s 'python web framework' >>> s.upper() 'PYTHON WEB FRAMEWORK' >>> s.lower() 'python web framework' >>> s.title() 'Python Web Framework' >>> s = "ABCDefg" >>> s.swapcase() 'abcdEFG'
(3)字符串填充:
center(width, fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格
ljust(width[, fillchar]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
rjust(width,[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
zfill (width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0
>>> s = "python" >>> s.center(20, '*') '*******python*******' >>> s.ljust(10, '*') 'python****' >>> s.rjust(10, '*') '****python' >>> s.zfill(10) '0000python'
(4)数值计算:
len(string) 返回字符串长度
count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数,str可以是一个字符也可以是多个字符
>>> s = "python" >>> len(s) 6 >>> s = "111222abcdefga" >>> s.count(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not int >>> s.count('1') 3 >>> s.count('1111') 0 >>> s.count('111') 1 >>> s.count('a') 2
容器型数据类型
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逆置。
2、字典
字典表示为dict,使用键值对的形式来存储数据的,使用的时候用花括号({})来对这些键值对进行封装,而且内部也是无序存储的。相对于list来说,字典的查询速度快,不会随着key的增加而变慢,但是需要大量的内存。这个通过key计算位置的算法被称为哈希算法。
如下:
注:键可以使用:元组,数字,字符串,如果是布尔值,会忽略,如果是字典或者列表,会直接报错。
如果键重复,只保留最后一个
常用字典方法
# 取字典值可以用键来取,如果写的是字典中没有的键,会报错,一般用get来取值,没有对应的键会返回None,get的第二个参数可以设置返回的值 a = {"name": "张三", "age": 18, "sex": "男"} print(a["name"]) # 张三 print(a.get("name")) # 张三 print(a.get("nam")) # None print(a.get("nam", "找不到")) # 找不到 print(a["nam"]) # 报错 复制代码 # 添加一个键值对,直接用:字典名["键名"] = 值 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,第二个是指定统一的
3、元组
元组不可以增删改
元组 (Tuple) 是 Python 中基本数据结构之一,与列表类似,但元组中的元素不允许被修改,因此元组也被称作 只读列表 。 元组使用小括号 - () 包裹,元素间使用逗号 - , 分隔,元组中的元素可以是字符串、数字、列表、元组等其他数据类型。
a = (1, 2, 3, [4, 5]) a[3][1] = 9 print(a) # (1, 2, 3, [4, 9])
4、集合
集合的两大功能:
- 集合可以实现去重的功能
- 集合可以实现关系测试:交集;差集;并集;是否子集;是否没有交集
1. 集合的定义
集合里面的元素是没有重复的
定义一个空集合:第一种方法的定义是错误的,生成的是一个字典;第二种方法才是正确的定义一个空集合的方法。
2. 集合的特性
集合是无序的,不重复的数据类型,因此不支持索引;切片;重复和连接,只满足成员操作符和for循环。
3. 集合的增删查
增加:
1. add()—增加单个元素
2. update()—增加多个元素
删除:
1. pop()—默认删除集合的第一个元素,这里与列表刚好相反,尤其注意,不可相互混淆。
2. remove()—删除指定的元素
3. clear()—清空集合元素
总结
可变数据类型:列表,字典,集合
不可变数据类型:数值类型,字符串,元组
可变数据类型实现某个功能,直接改变可变的数据类型;
不可变数据类型实现某个功能,需要将结果赋值给另外一个变量;
是否实现for循环
可迭代数据类型:str,list,tuple,dict,set
不可迭代数据类型:数值类型
是否支持索引,切片,重复和连接特性
有序的数据类型:str,list,tuple支持
无序的数据类型:dict,set不支持