WUYUANS
Just for Sharing

python学习笔记之内置数据类型

2013年04月06日 分类:学习笔记Python

python的内置数据类型非常丰富,大致可以分为五类:None、数字类型、序列类型、映射类型和集合类型。下面我将分别对他们进行介绍,做个总结以备以后查看。下面的表列出了各个类别下的具体数据类型。*注:本文所讲的内容都是基于python2的,python3会有些不同*。

类型分类类型名称描述
NoneType(None)null对象None
数字类型int整数
long长整数,任意精度(python2)
float浮点数
complex复数
bool布尔值(True或False)
序列类型str字符串
unicodeUnicode字符串(python2)
list列表
tuple元组
xrangexrang()创建的整数范围
映射类型dic字典
集合类型set可变集合
frozenset不可变集合

1.None

None表示一个null对象,这是一个空对象,如果一个函数没有返回值,则返回null对象。None没有任何属性,在布尔表达式中表示False。

2.数字类型

除了布尔类型外,所有数字类型都是有符号的。整数的表示范围在-2147483648和2147483647之间,长整数可以表示任意长度,只受可用内存大小的限制。

#整数
i = 123
i = int(123)
#长整数
l = 123L
l = long(123)

浮点数是双精度类型(64bit),和c语言中double相同,数值范围-1.7*10(-308)到1.7*10(308)。

f = 12.3
f = float(12.3)

复数使用一对浮点数表示,分为实部和虚部,使用real和imag访问,虚部后缀j或J。

c = 1.0 + 2.3j
c = complex(1.0, 2.3)
print c.real,c.imag

布尔值只有True和False两个值,分别映射为整数1和0。

b = False
b = bool(True)

2.1.数字运算

除了布尔类型外,int、long、float和complex都可以使用的运算为:加、减、乘、除、整除、幂运算和取余。下面分别举例说明。

>>> 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 # 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
True
>>> 1 <= 2
True
>>> 1 > 2
False
>>> 1 >= 2
False
>>> 1 == 2
False
>>> 1 != 2
True

对于布尔类型还可以进行逻辑运算,有3种运算:逻辑非(not)、逻辑非或(or)、逻辑与(and)。

>>> not True
False
>>> True or False
True
>>> True and False
False

2.2.常用数字类型函数

abs():返回给定对象的绝对值。

>>> abs(-2)
2

divmod():把除法和取余运算结合起来,返回一个包含商和余数的元组。

>>> divmod(10, 3)
(3, 1)

pow():两个参数,幂运算。三个参数,乘方后取余。

>>> pow(2, 5),pow(2, 5, 10)
(32, 2)

round():四舍五入

>>> round(3.4),round(3.6)
(3.0, 4.0)

floor():向下取整, ceil():向上取整, sqrt():开方, 需要math模块。

>>> from math import floor,ceil,sqrt
>>> floor(3.6),ceil(3.6),sqrt(9)
(3.0, 4.0, 3.0)

conjugate():复数取共轭

>>> c = 2 + 3j
>>> c.conjugate()
(2-3j)

3.序列类型

序列表示索引为非负数的有序对象集合,包括字符串、列表和元组。字符串是字符的序列,列表和元组是任意对象的序列。字符串和元组是不可变的,而列表可以插入、删除和替换。所有序列支持迭代。

3.1.字符串

创建一个字符串很简单,但表示字符串的方法有很多。

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的值。

>>> "Here is {0},I'm {name}.".format("wuyuans.com", name="wuyuan")
"Here is wuyuans.com,I'm wuyuan"

3.2.列表和元组

列表的内容可变,可以包含任意对象,使用中括号表示。
元组的内容不可变,可以包含任意对象,使用圆括号表示。

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]])排序
也可以通过索引来删除列表中的元素。

>>> l = [1, 2, 3, 4, 5]
>>> del l[1]
>>> l
[1, 3, 4, 5]

3.3.序列通用操作

所有序列都可以通过索引来访问,第一个元素的索引为0,-1为最后一个元素,-2倒数第二个,一次类推。
切片操作:指定索引范围,返回相应的子序列。
还有一些常用的,如下所示

>>> 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为步进值。

>>> x = xrange(1,10,2)
>>> for i in x:
 print i    
1
3
5
7
9

4.映射类型

字典(dict)是python为唯一的内置映射类型,任何不可变对象都可以用作字典的键值,如字符串、数字、元组等。字典使用大括号表示,键和值之间用冒号分割,各个键值间用逗号隔开。映射对象是无序的。

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中
字典的历遍方式:

#使用键历遍
for i in d:
    print i,d[i]
#使用键值历遍
for k,v in d.items():
    print k,v

5.集合类型

集合是唯一项的无序集,集合不提供索引或切片操作,集合的长度可变,但放入里面的必须是不可变的。集合分为两种:可变集合(set)和不可变集合(frozenset)。

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为任意支持迭代对象

写完收工。。。

作者:wuyuan 本文来自Wuyuan's Blog 转载请注明,谢谢! 文章地址: https://www.wuyuans.com/blog/detail/116