python的内置数据类型非常丰富,大致可以分为五类:None、数字类型、序列类型、映射类型和集合类型。下面我将分别对他们进行介绍,做个总结以备以后查看。下面的表列出了各个类别下的具体数据类型。注:本文所讲的内容都是基于python2的,python3会有些不同。
类型分类 | 类型名称 | 描述 |
None | Type(None) | null对象None |
数字类型 | int | 整数 |
long | 长整数,任意精度(python2) | |
float | 浮点数 | |
complex | 复数 | |
bool | 布尔值(True或False) | |
序列类型 | str | 字符串 |
unicode | Unicode字符串(python2) | |
list | 列表 | |
tuple | 元组 | |
xrange | xrang()创建的整数范围 | |
映射类型 | dic | 字典 |
集合类型 | set | 可变集合 |
frozenset | 不可变集合 |
1.None
None表示一个null对象,这是一个空对象,如果一个函数没有返回值,则返回null对象。None没有任何属性,在布尔表达式中表示False。
2.数字类型
除了布尔类型外,所有数字类型都是有符号的。整数的表示范围在-2147483648和2147483647之间,长整数可以表示任意长度,只受可用内存大小的限制。
1 2 3 4 5 6 | #整数 i=123 i=int(123) #长整数 l=123L l=long(123) |
浮点数是双精度类型(64bit),和c语言中double相同,数值范围-1.7*10(-308)到1.7*10(308)。
1 2 | f=12.3 f=float(12.3) |
复数使用一对浮点数表示,分为实部和虚部,使用real和imag访问,虚部后缀j或J。
1 2 3 | c=1.0+2.3j c=complex(1.0,2.3) printc.real,c.imag |
布尔值只有True和False两个值,分别映射为整数1和0。
1 2 | b=False b=bool(True) |
2.1.数字运算
除了布尔类型外,int、long、float和complex都可以使用的运算为:加、减、乘、除、整除、幂运算和取余。下面分别举例说明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>>1+2# 加法 3 >>>1-2# 减法 -1 >>>2*3# 乘 6 >>>2/4# 整数除 0 >>>2/4.0# 浮点除 0.5 >>>3//2.0# 整除 1.0 >>>2%3# 取余 2 >>>3**2# 幂运算 =3^2 9 |
对于整数还可以进行位运算,共有6种位运算:取反(~)、左移(<<)、右移(>>)、异或(^)、按位或(|)、按位与(&)。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> ~1# 1取反后为-2的补码 -2 >>>8<<1# 左移 16 >>>8>>2# 右移 2 >>>1^3# 01 和 11 异或得到10,就是2 2 >>>1|3# 01 和 11 位或得到11,就是3 3 >>>1&3# 01 和 11 位与得到01,就是1 1 |
布尔类型可以通过布尔表达式取值,布尔比较运算符有6种:小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、等于(==)、不等于(!=)。
1 2 3 4 5 6 7 8 9 10 11 12 | >>>1<2 True >>>1<=2 True >>>1>2 False >>>1>=2 False >>>1==2 False >>>1!=2 True |
对于布尔类型还可以进行逻辑运算,有3种运算:逻辑非(not)、逻辑非或(or)、逻辑与(and)。
1 2 3 4 5 6 | >>>notTrue False >>>TrueorFalse True >>>TrueandFalse False |
2.2.常用数字类型函数
abs():返回给定对象的绝对值。
1 2 | >>>abs(-2) 2 |
divmod():把除法和取余运算结合起来,返回一个包含商和余数的元组。
1 2 | >>>divmod(10,3) (3,1) |
pow():两个参数,幂运算。三个参数,乘方后取余。
1 2 | >>>pow(2,5),pow(2,5,10) (32,2) |
round():四舍五入
1 2 | >>>round(3.4),round(3.6) (3.0,4.0) |
floor():向下取整, ceil():向上取整, sqrt():开方, 需要math模块。
1 2 3 | >>>frommathimportfloor,ceil,sqrt >>> floor(3.6),ceil(3.6),sqrt(9) (3.0,4.0,3.0) |
conjugate():复数取共轭
1 2 3 | >>> c=2+3j >>> c.conjugate() (2-3j) |
3.序列类型
序列表示索引为非负数的有序对象集合,包括字符串、列表和元组。字符串是字符的序列,列表和元组是任意对象的序列。字符串和元组是不可变的,而列表可以插入、删除和替换。所有序列支持迭代。
3.1.字符串
创建一个字符串很简单,但表示字符串的方法有很多。
1 2 3 4 5 | s='string' s="string"# 和上面单引号一样 s='''string'''# 三引号之间的内容都被保留,用于多行输入 s=r"string"# 原生字符,关掉字符串中的转义。 s=u"string"# unicode字符串 |
字符串的方法很多,但不会改变字符串里的内容,常用的如下表所示。
方法 | 描述 |
index(sub[,start[,end]]) | 找到子字符串sub首次出现的位置,否则返回-1 |
find(sub[,start[,end]]) | 找到子字符串sub首次出现的位置,否则报错 |
startswith(prefix[,start[,end]]) | 检查是否以prefix开头 |
count(sub[,start[,end]]) | 计算子字符串sub出现的次数 |
decode([encoding[, errors]]) | 以encoding解码字符串,返回unicode字符串(只用于字节字符串) |
encode([encoding[, errors]]) | 以encoding编码字符串(只用于unicode字符串) |
upper() | 返回大写形式 |
lower() | 返回小写形式 |
split(sep[,maxsplit]) | 以sep为分隔符分割字符串,maxsplit为最大分割次数 |
join(t) | 使用当前字符串为分隔符连接t中的字符串 |
format(*args, **kwargs) | 格式化字符串 |
举个format的例子,{0}表示*args的第一个值,{name}表示**kwargs中name的值。
1 2 | >>>"Here is {0},I'm {name}.".format("wuyuans.com", name="wuyuan") "Here is wuyuans.com,I'm wuyuan" |
3.2.列表和元组
列表的内容可变,可以包含任意对象,使用中括号表示。
元组的内容不可变,可以包含任意对象,使用圆括号表示。
1 2 3 4 | l=[1,2,3,'4','5']# 列表 l=list((1,2,3,'4','5')) t=(1,2,3,'4','5')# 元组 t=tuple("1234") |
列表的方法主要用于改变里面的内容,下面列出列表常用的方法。
方法 | 描述 |
list(s) | 将s转化为一个列表 |
s.append(x) | 将新元素x加到s的尾部 |
s.extend(t) | 将新列表t加到s的尾部 |
s.count(x) | 计算x的出现次数 |
s.index(x[, start[, stop]]) | 搜索x元素 |
s.insert(i, x) | 在i处添加x |
s.pop([i]) | 弹出第i个元素,如果省略i,弹出最后一个 |
s.remove(x) | 移除x |
s.reverse(x) | 反转列表 |
s.sort([key[, reverse]]) | 排序 |
也可以通过索引来删除列表中的元素。
1 2 3 4 | >>> l=[1,2,3,4,5] >>>dell[1] >>> l [1,3,4,5] |
3.3.序列通用操作
所有序列都可以通过索引来访问,第一个元素的索引为0,-1为最后一个元素,-2倒数第二个,一次类推。
切片操作:指定索引范围,返回相应的子序列。
还有一些常用的,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> t=(1,2,3,4,5) >>> l=[1,2,3,4,5] >>> t[0] 1 >>> t[1:4]# 索引1~4 (2,3,4) >>> t[1:4:2]# 索引1~4,步进为2 (2,4) >>>len(t)# 序列长度 5 >>>max(t)# 最大值 5 >>>min(t)# 最小值 1 >>>sum(t)# 序列求和 15 |
3.4.xrange()对象
xrange()对象比较特殊,他表示一个整数范围,只有访问它时才会计算他的值,所以切片操作是不能用于xrange对象的。xrange对象由xrange([i, ] j [, stride])函数创建,i为起始值,stride为步进值。
1 2 3 4 5 6 7 8 | >>> x=xrange(1,10,2) >>>foriinx: printi 1 3 5 7 9 |
4.映射类型
字典(dict)是python为唯一的内置映射类型,任何不可变对象都可以用作字典的键值,如字符串、数字、元组等。字典使用大括号表示,键和值之间用冒号分割,各个键值间用逗号隔开。映射对象是无序的。
1 2 3 | d=dict((['name','wuyuan'], ['age',23])) d={'name':'wuyuan','blog':'wuyuans.com','age':23} d['school']='HDU'# 添加一项 |
字典的常用方法和操作
方法和操作 | 描述 |
len(d) | 返回字典d的项目数 |
d[k] | d中键k的值 |
del d[k] | 删除d[k] |
k in d | 如果k是d的键值,返回True |
d.clear() | 清空d |
d.copy() | 返回d的一个拷贝 |
d.fromkeys(s[, value]) | 返回一个新字典,s中的所有元素作为新字典的键,值为value |
d.get(k[, v]) | 返回d[k],没有则返回v |
d.items() | 返回由键值组成的序列,主要用于历遍 |
d.keys() | 返回由键组成的序列 |
d.values() | 返回由值组成的序列 |
d.pop(k[, default]) | 弹出d[k],没有则返回default |
d.update(b) | 将b中对象添加到d中 |
字典的历遍方式:
1 2 3 4 5 6 | #使用键历遍 foriind: printi,d[i] #使用键值历遍 fork,vind.items(): printk,v |
5.集合类型
集合是唯一项的无序集,集合不提供索引或切片操作,集合的长度可变,但放入里面的必须是不可变的。集合分为两种:可变集合(set)和不可变集合(frozenset)。
1 2 | s=set([1,2,3]) fs=frozenset([1,2,3]) |
集合通用方法和操作
方法和操作 | 描述 |
len(s) | 返回集合s的项目数 |
s.copy() | 返回集合s的一份副本 |
s.difference(t) | 求差集,返回在s中,但不在t中的项目 |
s.intersection(t) | 求交集,返回同时在s和t中的项目 |
s.isdisjoint(t) | s和t中没有相同项,返回True |
s.issubset(t) | s是t的子集,返回True |
s.issuperset(t) | s是t的超集,返回True |
s.union(t) | 求并集,返回在s或t中的项目 |
可变集合set的方法和操作
方法和操作 | 描述 |
s.add(item) | 添加item |
s.clear() | 清空集合s |
s.difference_update(t) | 在s中删除同时在s和t中的项目 |
s.discard(item) | 删除item |
s.pop() | 弹出任一项 |
s.remove(item) | 删除item,没有则引发异常 |
s.update(t) | 将t中所有项添加到t中,t为任意支持迭代对象 |