Python数据类型
一、Python有8种数据类型,包括Boolean(布尔值)+None(空值)+六个标准数据类型:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
1.1、查看变量的数据类型:type() 和isinstance()
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
eg:
if type(one) != int or type(two) != int:
print "THE NUMBER IS WRONG"
1.2 、数字Numbers
(1)python支持三种不同的数值类型
- int:整形(整型是没有限制大小的,可以当作 Long 类型使用)
- float:浮点型
- complex:复数
注:计算机里如何区分正数负数?我们规定最高位是符号位。为0是正,为1负。所以最高位是不可以参加计算的。比如二进制数1000最高位是符号位的话,转十进制不是8,而是负0(正0的二进制形式是0000)
(2)转换方法:
- int(x) 转换成一个integer
- long(x) 转换成一个long interger(python3中没有long)
- float(x) 转换成一个浮点数
- str():转换为字符串
- list():转换为列表
- eval():转换为字典
- 随机数函数:
- random() 随机生成下一个实数,它在[0,1)范围内
- uniform(x, y) 随机生成下一个实数,它在[x,y]范围内
(3)注意:
- Python可以同时为多个变量赋值,如a, b = 1, 2。
- 值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。
- 在混合计算时,Python会把整型转换成为浮点数。
1.3、字符串String
使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串。其中三引号可以由多行组成,编写多行文本的快捷语法
(1)字符串有两种索引方式,从左往右以0开始,从右往左以-1开始
(2)字符串格式化两种方法:
- 占位符% : 将一个值插入到一个有字符串格式符 %s 的字符串中
- %s 格式化字符串;
- %d 格式化整数)
eg:print "My name is %s and weight is %d kg!" % ('Zara', 21)
- str.format():增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 %
- {} 格式化字符串
- : 格式化数字
(3)转义字符: 使用反斜杠(\)转义特殊字符
(4)比较字符串:python可以使用比较运算符(==、!=、>、<...)通过比较字符的数值ASCII代码实现比较字符串大小
(5)字符串前面加r:意味着该字符串将被视为原始字符串,这意味着所有转义码都将被忽略
(6)字符串前面加u:代表编码是unicode
(7)字符串处理函数:
- strip():从原始字符串的开头和结尾删除给定的字符。默认删除字符串开头和结尾的空格,并返回前后不带空格的相同字符串
格式:str.strip([characters])
- startsWith():用来判断当前字符串是否是以另外一个给定的子字符串“开头”,根据判断结果返回 true 或 false。
格式:str.startsWith(searchString [, position]);
searchString要搜索的子字符串。
position在 str 中搜索 searchString 的开始位置,默认值为 0开头处。
- split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表
格式:str.split(str="",num=string.count(str))[n]
- str:表示为分隔符,默认为空格,但是不能为空('')
- num:表示分割次数
- [n]:表示选取第n个分片
str = "this is string example....wow!!!"
print (str.split( ))
#输出:['this', 'is', 'string', 'example....wow!!!']
1.4、列表List
列表用“ [ ] ”标识,是 python 最通用的复合数据类型,可包含任何类型的值。
语法:列表名=[值1,值2]
取值:列表名[1] (索引值以 0 为开始值,-1 为从末尾的开始位置)
(1)列表元素指向其值,列表是可变的,列表属于栈---后进先出(队列---先进先出)
-
- (pop:删除末尾/栈顶元素)
- (push:在末尾/栈顶添加元素)
(2)列表操作:
-
- 增:列表[0:0]=[元素](注意:这种方式是往列表中的第一个位置添加元素)
- 删:
- 删除单个元素:del 列表[下标]
- 删除多个元素(通过切片):del 列表[起始位置:结束位置]
- 改:列表[下标]=新值
- 查:
-
-
- 获取单个值:列表[下标],下标可以为负数,负数是从倒数获取
- 获取多个值:列表[起始位置:结束位置:步长],起始位置和结束位置可以省略不写;如果开始位置不写,则会从第一个元素开始获取;如果结束位置不写,则会获取到最后一个元素;如果都不写,则为列表的复制
-
5.遍历:遍历list列表的元素,使用for循环
(3)列表运算:
- +:两个列表相加,包含两个列表的所有元素
- *:列表元素重复
- in:检查元素是否存在
- not in:检查元素是否不存在
(4)列表方法:
- list.index(x):获取x的索引
- list.append(x):在列表最后追加元素
- list.extend(x,y):在列表最后追加多个元素
- list.insert(i, x): 在索引i处插入x
- list.pop(i, x): 删除索引处元素,没有指定i则删除最后一个元素
- list.remove(x) :移除x
- list.clear():清空列表
- list.count(x):统计x在列表中出现的次数
(5)列表排序:
(6)列表函数:
- len(list) :列表长度
- max(list):返回列表元素中的最大值
- min(list):返回列表元素中的最小值
(7)自引用 :snake[1]=snake [1,[...],3 ]
1.5、元组Tuple
元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表
1.6、字典Dictionary
字典当中的元素是通过键来存取的,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合
格式:d = {'key1' : value1, 'key2' : value2 }
键必须是唯一的,但值则不必,值可以取任何数据类型,但键必须是不可变(数字,字符串、元组)
(1)字典取值:
- person = {'name':'xiaoming', 'age':18}
- # 第一种 若键不存在则会抛出KeyError异常
- person['city']
- # 第二种 不会抛出异常,不存在则返回None,也可以设置默认返回值
- person.get('city',"上海")
- # 第三种 与第二种类似,区别在于setdefault方法会更新字典
- person.setdefault('city', '上海')
(2)修改字典:字典名[key]=value,如果key存在则修改,如果不存在则创建一个新的key和value person["name"]="小鹿"
(3)删除字典:def dic[] ;
清空字典内所有元素: dict.clear()
(4)遍历dict:
- keys():获取所有key ;.
- values():获取所有值;
- items() 方法:以列表返回可遍历的键值对
for key in person.keys():
print(f"{key}:{person.get(key)}")
for value in person.values():
print(f"{value}")
for key, value in person.items():
print(f"{key}:{value}")
(5)构造函数 dict() :可以直接从键值对序列中构建字典如下:
eg:a = dict([('Ctrip', 1), ('Google', 2), ('Taobao', 3)])
{'Ctrip': 1, 'Google': 2, 'Taobao': 3}
1.7、集合:(set)
是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:parame = {value01,value02,...} 或者 set(value)
(1)集合中判断元素是否存在:x in s
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # 这里演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
'orange' in basket # 快速判断元素是否在集合内
True
'crabgrass' in basket
False
(2)集合运算:
a = set('abracadabra')
b = set('alacazam')
a - b # 集合a中包含而集合b中不包含的元素{'r', 'd', 'b'}
a | b # 集合a或b中包含的所有元素{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b # 集合a和b中都包含了的元素{'a', 'c'}
a ^ b # 不同时包含于a和b的元素{'r', 'd', 'b', 'm', 'z', 'l'}
2、序列:值一组按顺序排列的值(字符串、元组、列表)
- 正索引为0,负索引为-1,为空表示头或尾
- 切片表达法:变量 [头下标:尾下标],从索引“头下标”到“尾下标-1”
s = 'ilovepython'
print(s[1:5]) #结果是love
array = [1, 2, 5, 3, 6, 8, 4]
array[1:] #列出1以后的。输出[2, 5, 3, 6, 8, 4]
array[:-1] #列出-1之前的。输出[1, 2, 5, 3, 6, 8]
array[3:-3] #列出3到-3之间的。输出[3]
array[::-1]#将列表反转输出[4,8,6,3,5,2,1]
array[::2]#每隔两个下标输出[1, 5, 6, 4]
(1)加号 + 是列表连接运算符,星号 * 是重复操作。
(2)使用len()计算长度
(3)x in s,当s位于x返回true,否则返回false