二.python数据类型
1.什么是数据类型
- Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
- 对象的三个特性:
- 身份:内存地址,可以用id()获取
- 类型:决定了该对象可以保存什么类型值,可执行何种操作,需遵循什么规则,可用type()获取
- 值:对象保存的真实数据
2.标准数据类型
2.1 数字
- 在python中数字可以分为:整型,长整型,布尔型,浮点型,复数几种:
- 特性:
不可更改.(如果修改会生成新的对象)
2.1.1 整型
- 定义:整型相当于整数型,包括正数或负数,比如1,-12,123都属于整型
- python2.*与python3.*关于整型的区别
python2.*
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
python3.*
整形长度无限制
2.1.2 长整型
- 定义:整型根据不同的操作系统会有取值范围,当取值范围超过整型的最大值或最小值时长整型就出现了,和整型的区别是在后面多个L
- python2.*与python3.* 关于长整型的区别
python2.*
Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a = 9223372036854775807 >>> a 9223372036854775807 >>> a = a + 1 >>> a 9223372036854775808L >>>
python3.*
Python 3.4.0 (default, Jun 19 2015, 14:20:21) [GCC 4.8.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> a = 9223372036854775807 >>> a 9223372036854775807 >>> a = a + 1 >>> a 9223372036854775808 >>>
2.1.3 布尔型
- 定义:用来表示真假,True为"真" ,False为"假"。 数字表示1为真,0为假。
- 一般用于逻辑运算,逻辑运算如下:
- 与:and(两个都为True,结果才为True)
- 或:or(只要一个为True,则为True)
- 非:not(把True变为False,把False变为True)
2.1.4 浮点型
- 定义:浮点数就是初中时候学的"小数",用来计算更精确的计数,用float指定。
例如:在python2.x中,5/2=2,默认是整型输出,这时需要指定数字的类型
Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 5/2 2 >>> type(5/2) <type 'int'> >>> float(5)/float(2) 2.5 >>> type(float(5)/float(2)) <type 'float'> >>>
2.1.4 复数
- 定义:复数是由一个实数和一个虚数组合构成,表示为:x+yj,其中x是实数部分,y是虚数部分。
- python中复数的概念:
- 虚数不能单独存在,它们总是和一个值为0.0的实数部分一起构成一个复数
- 复数由实数部分和虚数部分构成
- 表示虚数的语法:real+imagej
- 实数部分和虚数部分都是浮点数
- 虚数部分必须有后缀j或J(大写J==小写j)
2.1.5 操作符
- 定义:数值类型可以进行多种运算操作,这种运算所用到的字符,统称为操作符
- 操作符分类:
1.标准类型操作符(比较)
<(小于), >(大于), ==(等于), <=(小于等于), >=(大于等于),, !=(不等于)
2.算数操作符
+(加), -(减), *(乘), /(浮点除法), //(整除), %(取余), **(幂运算)
2.2 字符串
- 定义:它是一个有序的字符的集合,用于存储和表示基本的文本信息,' '(单引号)或" "(双引号)或""" """(三引号)中间包含的内容称之为字符串
- 特性:
- 只能存放一个值
- 不可变
- 按照从左到右的顺序定义字符集合,下标从0开始顺序访问,有序
字符串的常用操作方法
去除空格
>>> str1 = " All is well " >>> str1.lstrip() #去除左边空格 'All is well ' >>> str1.rstrip() #去除右边空格 ' All is well' >>> str1.strip() #去除两边空格 'All is well' >>>
连接字符串
>>> str1 = "All" >>> str2 = " is well" >>> str1+str2 'All is well' >>>
切割字符串
>>> str1 = "a bc def" >>> str1.split(" ") #以空格进行切割 ['a', 'bc', 'def'] >>>
拼接字符串
>>> str1 = "abcdefg" >>> ':'.join(str1) #以冒号进行拼接 'a:b:c:d:e:f:g' >>>
更多方法:
>>> str1 = "Hello world" >>> dir(str1) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] >>>
2.3 列表
- 定义:列表是处理和存放一组可变数据,在[] 中括号内以逗号分隔。比如[1,2,3]是一个列表,1,2,3是列表的元素。
- 特性:
1. 能放多个值
2.可变(可以随时添加或删除)
3.有序集合
4.定义语法:ShoppingList = ['car','clothes','Iphone']
列表的基本用法:
#增 >>> ShoppingList = ['car','clothes','Iphone'] >>> print(ShoppingList) ['car', 'clothes', 'Iphone'] >>> >>> ShoppingList.append('MP3') >>> print(ShoppingList) ['car', 'clothes', 'Iphone', 'MP3'] #删 >>> print(ShoppingList) ['car', 'clothes', 'Iphone', 'MP3'] >>> ShoppingList.remove('MP3') >>> >>> print(ShoppingList) ['car', 'clothes', 'Iphone'] >>> #改 >>> print(ShoppingList) ['car', 'clothes', 'Iphone'] >>> ShoppingList[0] = 'MP3' >>> >>> print(ShoppingList) ['MP3', 'clothes', 'Iphone'] >>> #查 >>> print(ShoppingList) ['MP3', 'clothes', 'Iphone'] >>> print(ShoppingList[0]) MP3 >>> print(ShoppingList[1]) clothes >>> print(ShoppingList[2]) Iphone >>> print(ShoppingList[3]) #超出索引会报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range >>> print(ShoppingList[-1]) Iphone >>> print(ShoppingList[-2]) clothes >>> print(ShoppingList[-3]) MP3 >>> #特殊用法(切片) >>> num = [x for x in range(10)] #生成 >>> print(num) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> num[0:3] #取值0<=n<3 [0, 1, 2] >>> num[:3] [0, 1, 2] >>> num[0:-3] #取值0到倒数第三个 [0, 1, 2, 3, 4, 5, 6] >>> num[-3:0] #倒数第三个开始,0结束,中间没有值 [] >>> num[0:9:2] #取0-9,步长为2 [0, 2, 4, 6, 8] >>>
更多方法:
>>> list1 = [1,2,3,4] >>> dir(list1) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>>
2.4 元组
- 定义:元组是处理和存放一组不可变数据,在()小括号内以逗号分隔。比如(1,2,3)是一个元组,1,2,3是元组的元素。
- 特性:
1.能放多个值
2.不可变
3.有序集合
4.定义语法:UserName = ('张三','李四','王五')
元组的基本用法:
#定义查看 >>> tuple_test = (1,2,3,4) >>> print(tuple_test) (1, 2, 3, 4) >>> type(tuple_test) <class 'tuple'> #元组是不可变因素,因此不能像列表那样,增删改。一旦定义,不能改。 #按索引读取 >>> tuple_test[0] 1 >>> tuple_test[1] 2 #定义元组的误区(这里1为什么类型是int?) >>> tuple_test2 = (1) >>> print(tuple_test2) 1 >>> print(type((tuple_test2))) <class 'int'> #以上python会把(1)当成小括号。最后是int类型 #正确定义元组示例如下,这里定义(1,) 有个逗号。 >>> tuple_test3 = (1,) >>> print(tuple_test3) (1,) >>> print(type(tuple_test3)) <class 'tuple'> >>> #切记,当元组内有单个元素时,必须在后面跟上一个逗号(,) #特殊示例(为什么元组变了?) >>> tuple_test4 = (1,2,3,[4,5]) >>> print(tuple_test4 tuple_test4 >>> print(tuple_test4) (1, 2, 3, [4, 5]) >>> tuple_test4[3][0] = "A" >>> tuple_test4[3][1] = "B" >>> print(tuple_test4) (1, 2, 3, ['A', 'B']) >>> #这里要说明的是,元组不变的特性其实指的是元组的元素不变,而元组内的元素是个列表,这个列表已经指向了内存的固定位置,但是根据列表的特性,这个列表是可变的,但是,即使这个列表变,在内存中还是不变的。 内存地址不变例子: >>> tuple_test4 = (1,2,3,[4,5]) >>> print(tuple_test4) (1, 2, 3, [4, 5]) >>> id(tuple_test4[3]) 140625563278408 #改之前的内存地址 >>> tuple_test4[3][0] = "B" >>> tuple_test4[3][1] = "C" >>> print(tuple_test4) (1, 2, 3, ['B', 'C']) >>> id(tuple_test4[3]) 140625563278408 #改之后的内存地址 >>>
更多方法:
>>> tuple_test = (1,2,3,4) >>> dir(tuple_test) ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] >>>
2.5 字典
- 定义:字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。
- 特性:
1.可存放多个值
2.键必须独一无二,但值则不必。
3.可修改指定key对应的值,可变
4.每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。
- 定义语法:Info = {'name':'zhangsan','age':23}
字典基本用法:
#增 >>> NameInfo = {} >>> NameInfo['name'] = 'All is well' >>> NameInfo['age'] = '23' >>> print(NameInfo) {'age': '23', 'name': 'All is well'} >>> #删(分为删除字典元素与清空字典) #单个元素删除 >>> NameInfo = {} >>> NameInfo['name'] = 'All is well' >>> NameInfo['age'] = '23' >>> print(NameInfo) {'age': '23', 'name': 'All is well'} >>> del NameInfo['name'] >>> print(NameInfo) {'age': '23'} #清空字典 >>> NameInfo = {'name':'All is well','age':23} >>> >>> print(NameInfo) {'age': 23, 'name': 'All is well'} >>> NameInfo.clear() >>> print(NameInfo) {} #改 >>> NameInfo = {'name':'All is well','age':23} >>> NameInfo['name'] = 'zhangsan' >>> print(NameInfo) {'age': 23, 'name': 'zhangsan'} >>> #更新(这里切记键不能重复,否则会报错,违反了特性) >>> test = {'a':1,'b':2,'c':3,'d':4} >>> print(test) {'b': 2, 'd': 4, 'c': 3, 'a': 1} >>> test2 = {'eee':5} >>> test.update(test2) >>> print(test) {'b': 2, 'd': 4, 'c': 3, 'eee': 5, 'a': 1} >>> #查 >>> NameInfo = {'name':'All is well','age':23} >>> print(NameInfo) #打印字典 {'age': 23, 'name': 'All is well'} >>> print(NameInfo['name']) #以键取值 All is well >>> #无序体现 >>> test = {'a':1,'b':2,'c':3,'d':4} >>> print(test) {'b': 2, 'd': 4, 'c': 3, 'a': 1} >>>
字典更多用法:
>>> test = {'a':1,'b':2,'c':3,'d':4} >>> dir(test) ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] >>>
2.6 集合
- 集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。
- 特性:
1.无序的
2.元素不能重复
3.没有索引
定义语法:se = set([11,22,33,44])
集合的操作符:
集合的基本用法
#生成集合 >>> a= set([1,2,3,4]) >>> print(type(a)) <class 'set'> >>> >>> a.add(213) #增加内容 >>> a {1, 2, 3, 4, 213} >>> a.update([11,12,13]) #增加多条内容 >>> a {1, 2, 3, 4, 11, 12, 13, '213'} >>> a.remove('213') #删除内容 >>> a {1, 2, 3, 4, 11, 12, 13} >>> #常用方法 >>> x = set('12345') >>> y = set('45678') >>> x {'5', '2', '1', '3', '4'} >>> y {'5', '6', '7', '4', '8'} >>> x & y #交集 {'5', '4'} >>> >>> x|y #并集 {'7', '3', '5', '2', '1', '6', '4', '8'} >>> >>> x - y #差集 {'2', '1', '3'}
集合的更多用法
>>> a = set([11,22,33,44]) >>> >>> dir(a) ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update'] >>>
3.数据类型的总结
1.存储模型分类
- 标量/原子类型------------------------>数值(所有的数值类型), 字符串(全部是文字)
- 容器类型 ------------------------------>列表 元组 字典
2.变更性分类
- 可变类型 ------------------------------->列表 字典
- 不可变类型----------------------------->数字 字符串 元组
3.访问模型
- 直接访问-------------------------------->数字
- 顺序访问-------------------------------->字符串 列表 元组
- 映射访问-------------------------------->字典