Python数据类型详解

来源:互联网 发布:灰蚂蚁太阳镜 知乎 编辑:程序博客网 时间:2024/06/08 07:19

Python数据类型详解

python的数据类型有:
整数
浮点数
字符串
布尔值
列表
元组
字典
集合
空值


1、整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

2、浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

3、数字操作

3.1 数字类型转换

int(x [,base]) 将x转换为一个整数
float(x ) 将x转换到一个浮点数
complex(real [,imag]) 创建一个复数
str(x) 将对象x转换为字符串
repr(x) 将对象x转换为表达式字符串
eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s) 将序列s转换为一个元组
list(s) 将序列s转换为一个列表
chr(x) 将一个整数转换为一个字符
unichr(x) 将一个整数转换为Unicode字符
ord(x) 将一个字符转换为它的整数值
hex(x) 将一个整数转换为一个十六进制字符串
oct(x) 将一个整数转换为一个八进制字符串

3.2 数学函数

abs(x) 返回数字的绝对值,如abs(-10) 返回 10
ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x) 返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,…) 返回给定参数的最大值,参数可以为序列。
min(x1, x2,…) 返回给定参数的最小值,参数可以为序列。
modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y) x**y 运算后的值。
round(x [,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x) 返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j

4、字符串

字符串是以单引号'或双引号"括起来的任意文本。比如'abc'"xyz"等等。请注意,''""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有abc这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I'm,空格,OK这6个字符。

利用三引号''',表示多行的字符串,可以在三引号中自由的使用单引号和双引号,例如:

str='''this's stringthis is pythod stringthis is string'''

如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:
'I\'m \"OK\"!'

表示的字符串内容是:
I'm "OK"!

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\,可以在Python的交互式命令行用print()打印字符串看看:

 >>>print('I\'m ok.') I'm ok.print('I\'m learning\nPython.')I'm learningPython.print('\\\n\\')\\

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义,可以自己试试:

 >>> print('\\\t\\') \       \ >>> print(r'\\\t\\') \\\t\\

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容,可以自己试试:

 print('''line1... line2... line3''')line1line2line3

4、布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写)。

5、列表

list是Python内置的一种数据类型。list是一种有序的集合,可以随时添加和删除其中的元素。
list用[ ]符号表示。

5.1 初始化列表

list里面的元素的数据类型可以不同,也可以是另外一个列表。

例如:
list=[‘physics’, ‘chemistry’, 1997, 2000];
nums=[1, 3, 5, 7, 8, 13, 20];

5.2 访问列表中的值

用索引来访问list中每一个位置的元素,记得索引是从0开始的:

”nums[0]: 1”
print “nums[0]:”, nums[0]
”nums[2:5]: [5, 7, 8] 从下标为2的元素切割到下标为5的元素,但不包含下标为5的元素”
print “nums[2:5]:”, nums[2:5]
”nums[1:]: [3, 5, 7, 8, 13, 20] 从下标为1切割到最后一个元素”
print “nums[1:]:”, nums[1:]
”nums[:-3]: [1, 3, 5, 7] 从最开始的元素一直切割到倒数第3个元素,但不包含倒数第三个元素”
print “nums[:-3]:”, nums[:-3]
”nums[:]: [1, 3, 5, 7, 8, 13, 20] 返回所有元素”
print “nums[:]:”, nums[:]

当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素,以此类推,-2表示倒数第2个元素、-3表示倒数第3个元素。

5.3 更新列表

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置

nums[0]=”ljq”;
print nums[0];

5.4 删除列表元素

del nums[i],其中i是索引位置

del nums[0];
”nums[:]: [3, 5, 7, 8, 13, 20]”
print “nums[:]:”, nums[:];

或者用pop(i)方法,其中i是索引位置,直接调用pop()函数,会删除list末尾的元素。

nums.pop(0)
”nums[:]: [3, 5, 7, 8, 13, 20]”
print “nums[:]:”, nums[:];

5.5 列表运算

python表达式 结果 描述 len([1,2,3]) 3 计算元素个数 [1,2,3]+(4,5,6] [1,2,3,4,5,6] 连接 [‘hi!’]*4 [‘hi!’,’hi!’,’hi!’,’hi!’] 复制 3 in [1,2,3] True 元素是否存在 for x in [1,2,3] print x 1 2 3 迭代

5.6 列表函数

list.append(obj) 在列表末尾添加新的对象
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置,索引从0开始
list.insert(index, obj) 将对象插入列表
list.pop(i) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素,倒转
list.sort([func]) 对原列表进行排序

6、元组

Python的元组tuple与列表类似,不同之处在于元组的元素不能修改;
tuple用( )符号表示。
tuple创建很简单,只需要在括号中添加元素,并使用逗号(,)隔开即可,例如:

tup1 = (‘physics’, ‘chemistry’, 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = “a”, “b”, “c”, “d”;

创建空元组,例如:tup = ();
元组中只有一个元素时,需要在元素后面添加逗号,例如:tup1 = (50,);
元组与列表类似,下标索引从0开始,可以进行截取,组合等。

现在,tup1 这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用tup1 [0],tup1 [-1],但不能赋值成另外的元素。
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

6.1 元组函数

cmp(tuple1, tuple2) 比较两个元组元素。
len(tuple) 计算元组元素个数。
max(tuple) 返回元组中元素最大值。
min(tuple) 返回元组中元素最小值。
tuple(seq) 将列表转换为元组。

7、字典

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
dict用{ }符号表示。
列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。
第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。dict就是第二种实现方式。

7.1 初始化字典

初始化基本语法如下:

dict = {‘Alice’: ‘2341’, ‘Beth’: ‘9102’, ‘Cecil’: ‘3258’};
dict1 = { ‘abc’: 456 };
dict2 = { ‘abc’: 123, 98.6: 37 };

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

d[‘Adam’] = 67
print d[‘Adam’]
67

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉。

7.2 访问字典里的值

d= {‘name’: ‘Zara’, ‘age’: 7, ‘class’: ‘First’};
print “d[‘name’]: “, d[‘name’];
print “d[‘age’]: “, d[‘age’];

如果key不存在,dict就会报错

d[‘Thomas’]
Traceback (most recent call last):
File “”, line 1, in
KeyError: ‘Thomas’

要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:

‘Thomas’ in d
False

二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:

d.get(‘Thomas’)
d.get(‘Thomas’, -1)
-1

注意:返回None的时候Python的交互式命令行不显示结果。

8、集合

set和dict类似,也是一组key的集合,但不存储value。是一个无序不重复元素集,由于key不能重复,所以,在set中,没有重复的key。
set用{ }符号表示。

8.1集合初始化

s1=set(‘boy’)
s2=set([‘y’, ‘b’, ‘o’])

重复元素在set中自动被过滤:

s = set([1, 1, 2, 2, 3, 3])
s
{1, 2, 3}

8.2集合添加、删除

python 集合的添加有两种常用方法,分别是add和update。
集合add方法:是把要传入的元素做为一个整个添加到集合中,例如:

s = set(‘boy’)
s.add(‘python’)
s
set([‘y’, ‘python’, ‘b’, ‘o’])

集合update方法:是把要传入的元素拆分,做为个体传入到集合中,例如:

a = set(‘boy’)
a.update(‘python’)
a
set([‘b’, ‘h’, ‘o’, ‘n’, ‘p’, ‘t’, ‘y’])

集合删除操作方法:remove

a=set([‘y’, ‘python’, ‘b’, ‘o’])
a.remove(‘python’)
a
set([‘y’, ‘b’, ‘o’])

8.3集合数学运算

假定:

x = set(‘spam’)
y = set([‘h’,’a’,’m’])

python表达式 结果 描述 x-y {’s’,’p’} 差集,相对补集 x & y {‘m’, ‘a’} 交集 x|y {’s’, ‘p’, ‘m’, ‘h’, ‘a’} 合集、并集 x!=y True 不等于 x==y False 等于 ‘h’ in y True 是成员关系 ‘h’ not in y False 不是成员关系

9、空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

10 、可变数据类型和不可变数据类型

python可变数据类型:列表list[ ]、字典dict{ }、集合set{}
python不可变数据类型:整数、浮点数、布尔值、字符串str’ ‘、元组tuple()。