首页 > 其他学习 > python > Python的数据类型和常用操作及序列
2016
12-16

Python的数据类型和常用操作及序列

Python和php一样,也是弱类型语言,声明或定义某个变量时不需要声明数据类型。

type(object)可以打印出对象的直接所属类名。

isinstance(object,type_class_name) :判断对象是否属于指定类名或者指定类名的子类

type() 不会认为子类是一种父类类型,不考虑继承关系。isinstance() 会认为子类是一种父类类型,考虑继承关系。如果要判断两个类型是否相同推荐使用 isinstance()。

1、数字类型:在Python中有4种类型的数:

整数(int),范围-2147483648到2147483647

长整数(long),当数值在普通整数范围内为了区分普通整数和长整数,需要在整数后加L或l(小写的L,由于小写的l和数字1很像,一般为了程序的清楚,使用大写的L)来标注该数字为长整数,如a=12L(a的值为12,L不是值的一部分,只是标注该变量的数值为长整型类型。)

浮点数(float),

复数(complex),在定义是后面加上小写的j标注该数值为复数类型。

abs(x) :返回x的绝对值  divmod(x,y) :返回x除以y的商和余数组成的元组  pow(x,y[,z]) :返回(x**y)%z

sum(list[,num]) 先对列表中的元素相加,然后在加上数值num,num可以省略。

round( x [, n] ):把数值x进行四舍五入,n代表小数点后面保留几位,默认为0。

2、字符串类型(str):字符串可以使用单引号(''),双引号("")和三引号('''字符串'''或"""字符串""")来指示字符串,三引号可以用来包含多行字符串。

1>自然字符串,在输出时不需要特殊处理字符串中出现的转义符,通过给字符串加上前缀r或R来指定字符串为自然字符串,如:a=r"this is \n string"

2>Unicode字符串:Unicode是书写国际文本的标准方法,Python可以处理非英文语言的字符串,需要给字符串加上前缀u或U,如a=u"这是一个Unicode字符串"

3、布尔值:有True和False两个(注意首字母大写),布尔值可以用and、or和not运算。

4、列表(list) :列表通过中括号([])中用逗号分隔的元素定义,是一种有序的集合,可以随时添加和删除其中的元素。

list(range(n,m,i))可以快速创建一个列表,range()创建一个range类型的数据,使用list()转化为列表,n为开始的字符,m为结束的字符(生成的列表中包含n但是不包含m),i为步长,即每隔多少取一个值(可以省略,默认为1)

列表生成式:[计算表达式 for循环语句1 for循环语句2 ... 判断条件]

[x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

创建一个1到10中偶数的平方组成的列表

[m + n for m in 'ABC' for n in 'XYZ']

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

两层循环,三层和三层以上的循环就很少用到了。

列表生成式也可以使用两个变量来生成list:

d = {'x': 'A', 'y': 'B', 'z': 'C' }

[k + '=' + v.lower() for k, v in d.items()]

['y=b', 'x=a', 'z=c']

生成键值对并且值变成小写的列表

5、元组(tuple) :元组和列表类似,只不过元组和字符串一样是不可变的(元组重新给元素赋值会报错),元组通过圆括号中用逗号分隔的元素定义。如a=('name',25,'male'),定义一个单一元素的元组,最后要加一个逗号a=('name',)。

列表的很多方法在元组中都是可以使用的,但是由于元组的不可变的特性,所以有些涉及到改变元组的元素或结构的方法不能使用。

最后来看一个“可变的”tuple:

>>> t = ('a', 'b', ['A', 'B'])

>>> t[2][0] = 'X'

>>> t[2][1] = 'Y'

>>> t

('a', 'b', ['X', 'Y'])

这个tuple定义的时候有3个元素,分别是'a','b'和一个list。不是说tuple一旦定义后就不可变了吗?怎么后来又变了?

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。

序列:字符串,列表和元组类型都是序列,索引和切片是序列的主要特点,

索引:序列中可以通过索引值来获取序列中的某个元素,如a=abc,那么a[1]代表序列的第二个位置的字符(b),索引值可以为负数,表示从右侧开始的索引,如a[-2]表示倒数第二个元素。。

切片:a=abcde,使用a[[start,]stop[,step]]来截取序列的某些元素,start起始位置、stop结束位置、step步长,截取的元素含起始索引元素但不包含结束索引元素(所以结束索引需要向后多算一位),起始索引省略默认从开头取,结束索引默认取到字符串最后,步长默认为1.负数标识从右计算。

使用函数slice([start,]stop[,step])进行序列切片,使用方法为a=abcde,a[slice(2,5)]

序列的基本操作:

1、len() :返回序列的长度

2、+ :连接2个序列

3、* :重复序列元素,a*3标识把变量a的值重复3次

4、in :判断元素是否在序列中

5、max() :返回最大值

6、min() :返回最小值

7、cmp(n1,n2) :比较2个序列值的大小,n1大于n2返回1,n1小于n2返回-1,n1等于n2返回0

6、字典(dict):是python中唯一的映射类型(哈希表),字典中元素的值是可变的,但是字典的键必须使用不可变对象(数字和字符串)。

创建字典:

1>用花括号{},如a={'name':'myname','age':28,'gender':'male'}

2>使用工厂方法dice():

以键值对方式构造字典,键不能是数值且不需要加引号:a=dict(name='myname',age=28,gender='male')

以映射函数方式来构造字典:a=dict(zip(['name','age','gender'],['myname',28,'male']))

可迭代对象方式来构造字典:a=dict([('name','myname'),('age',28),('gender','male')])

复制一个字典的所有内容给另一个变量,两个变量不是一个内存地址,是相互独立的。b = dict(a)

3>使用字典的内建方法dict.fromkeys(key_list[,value]),这种方法适合字典中的元素具有相同的值,value可以省略,默认为None。如:a=dict.fromkeys(['name','age','gender'],'zhi')

7、set和dict类似,是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的值。要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])

>>> s

{1, 2, 3}

传入的参数[1,2,3]是一个list,而显示的{1,2,3}告诉你这个set内部有1,2,3这3个元素,显示顺序也不表示set是有序的。重复元素在set中自动被过滤:

通过add(key)方法可以添加key元素到set中,可以重复添加,但不会有效果:

通过remove(key)方法可以删除key元素:

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])

>>> s2 = set([2, 3, 4])

>>> s1 & s2

{2, 3}

>>> s1 | s2

{1, 2, 3, 4}

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

执行类型之间的转换,使用类型作为函数名,如str(x)标识把x转换为字符串类型。常见的数据类型:

int :整数  long :长整数  float :浮点数  complex :复数  str :字符串

hex(x) :十六进制整数(前缀0x)  oct(x) :八进制整数(前缀0)  bin(x) :二进制整数(前缀0b)

repr : 返回一个对象的string格式  tuple :元组  list :列表  set :集合  frozenset :冻结集,冻结后集合不能再添加或删除任何元素。

dict :字典(转换的必须是(键,值)元组序列)  bool :布尔值

chr(x) :将一个ascii码整数转换为一个字符,支持10进制和16进制(数字以0x前缀表示)。

unichr(x) :将一个ascii码整数转换为一个Unicode字符,支持10进制和16进制(数字以0x前缀表示)。

ord()  :是 chr() 或unichr() 的配对函数,返回长度为1的字符串对应的 ASCII 数值或者 Unicode 数值,如果给定的 Unicode 字符超出了 Python 定义范围,则会引发一个 TypeError 的异常。

eval(x) :计算一个字符串,并返回一个对象,把字符串当作代码运行。

数字类型、字符串类型和元组类型一旦创建是不可更改的

每当创建一个变量时,内存会在数据区开辟一个新的存储空间用来存储该值,使用函数id(变量)可以获取一个变量的内存存储地址

当重新给一个数字类型或字符串类型的变量赋值时,实质上是在内存的数据区再次重新开辟一个新的存储空间来存储新的值,原来存储空间的仍然存在并且存储的值没有改变,只不过把这个变量指向了新的存储空间。

元组在修改元素值或数据结构时直接报错。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。