python的数据类型有:
整数
浮点数
字符串
布尔值
列表
元组
字典
集合
空值
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
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) 将一个整数转换为一个八进制字符串
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
字符串是以单引号'
或双引号"
括起来的任意文本。比如'abc'
,"xyz"
等等。请注意,''
或""
本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'
只有a
,b
,c
这3个字符。如果'
本身也是一个字符,那就可以用""
括起来,比如"I'm OK"
包含的字符是I
,'
,m
,空格,O
,K
这6个字符。
利用三引号'''
,表示多行的字符串,可以在三引号中自由的使用单引号和双引号,例如:
str='''this's string this is pythod string this 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 learning Python. print('\\\n\\') \ \
如果字符串里面有很多字符都需要转义,就需要加很多\
,为了简化,Python还允许用r''
表示''
内部的字符串默认不转义,可以自己试试:
>>> print('\\\t\\') \ \ >>> print(r'\\\t\\') \\\t\\
如果字符串内部有很多换行,用\n
写在一行里不好阅读,为了简化,Python允许用'''...'''
的格式表示多行内容,可以自己试试:
print('''line1 ... line2 ... line3''') line1 line2 line3
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写)。
list是Python内置的一种数据类型。list是一种有序的集合,可以随时添加和删除其中的元素。
list用[ ]符号表示。
list里面的元素的数据类型可以不同,也可以是另外一个列表。
例如:
list=[‘physics’, ‘chemistry’, 1997, 2000];
nums=[1, 3, 5, 7, 8, 13, 20];
用索引来访问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个元素。
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置
nums[0]=”ljq”;
print nums[0];
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[:];
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 | 迭代 |
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]) 对原列表进行排序
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。
cmp(tuple1, tuple2) 比较两个元组元素。
len(tuple) 计算元组元素个数。
max(tuple) 返回元组中元素最大值。
min(tuple) 返回元组中元素最小值。
tuple(seq) 将列表转换为元组。
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
dict用{ }符号表示。
列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。
第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。dict就是第二种实现方式。
初始化基本语法如下:
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,后面的值会把前面的值冲掉。
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的交互式命令行不显示结果。
set和dict类似,也是一组key的集合,但不存储value。是一个无序不重复元素集,由于key不能重复,所以,在set中,没有重复的key。
set用{ }符号表示。
s1=set(‘boy’)
s2=set([‘y’, ‘b’, ‘o’])
重复元素在set中自动被过滤:
s = set([1, 1, 2, 2, 3, 3])
s
{1, 2, 3}
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’])
假定:
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 | 不是成员关系 |
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
python可变数据类型:列表list[ ]、字典dict{ }、集合set{}
python不可变数据类型:整数、浮点数、布尔值、字符串str’ ‘、元组tuple()。