四、Python数据类型
数字
字符串
列表
元祖
字典
1.数字类型
整型
表示范围:-2147483648到2147483647,超过该范围的会被当作长整型
示例:num=123
type(num)—返回<type ‘int‘>,用来测试变量的类型
长整型
表示范围:任意大整数,后跟L或l与整型区别
示例:num=1l
type(num)—返回<type ‘long‘>
浮点型
示例:num=12.0
type(num) —返回<type‘float‘>
复数型
示例:num=3.14j(j表示虚部)
type(num) —返回<type‘complex‘>
2.字符串类型
字符型:使用引号定义的一组可以包含数字,字母,符号的集合
定义方式:
strval=’helloworld!’
strval=”helloworld!”
strval=”””helloworld!”””
type(strval)—返回<type ‘str‘>
注:单引号,双引号在本例中区别不大,但是要注意这样的情况,若字符串中本身有单引号,则需要使用双引号来定义,例如:str1=”let’s go”,如果字符串中有双引号,则可以使用转义符“\”,例如str2=”let’s \“go\””
三重引号的用法:用来控制字符格式化输出(也可以用来注释)
>>>mail="""Hi Tom: ... I am jack ... goodbye ... """ >>> print mail Hi Tom: I am jack goodbye >>>
字符串的取值(索引取值)
字符串,元组和列表都是序列类型数据
例如:定义a=’abcde’,字符串中每一个字母都有自己的存储空间,可以单独地将他们取出来:
>>>a=‘abcde‘ >>> a[0] ‘a‘ >>> a[1] ‘b‘ >>> a[2] ‘c‘ >>> a[3] ‘d‘ >>> a[4] ‘e‘
同时取两个:
>>>a[0]+a[1] ‘ab‘
字符串的切片:str[开始序号:终止序号],取开始序号至终止序号之前的字符
仍然定义a=’abcde’,现在要截取其中连续字符:
截取‘bcd’:a[1:4],表示从a[1]-a[4]之前的字符,注意,不包括 a[4]
截取‘abcd’:a[:4],不写开始序号则表示,从序号0开始
仍然定义a=’abcde’,现在要隔空截取其中字符:
截取‘ace’:a[::2],表示取a[0],a[2],a[4],2为步长
仍然定义a=’abcde’,现在要从右向左截取其中连续字符:
截取‘bcd’:a[-4:-1],仍然不包含a[-1]
3.序列
列表,元组和字符串都是序列
序列的的主要特点是索引操作符和切片操作符
索引操作符可从序列中抓取一个特定字符
切片操作符可以获取序列的一个切片(部分序列)
序列的基本操作:
len():求序列长度
>>>str="abcde" >>> len(str) 5
+:连接两个序列
>>>str="abcde" >>> str2="12345" >>> str+str2 ‘abcde12345‘
*:重复序列元素
>>>str2="12345" >>> str2*5 ‘1234512345123451234512345‘
in:判断元素是否在序列中
>>>str=‘abcde‘ >>> ‘c‘ in str
True(正确返回True,错误返回False)
max():返回最大值
>>>str2=‘123456‘ >>> max(str2) ‘6‘
min():返回最小值
>>>str2=‘123456‘ >>> min(str2) ‘1‘
cmp(tuple1,tuple2):比较2个的序列值是否相同
>>>str1=‘abcde‘ >>> str2=‘12345‘ >>> cmp(str1,str2) 1 >>> str1=‘1‘ >>> cmp(str1,str2) -1 >>> str1=‘12345‘ >>> str2 ‘12345‘ >>> cmp(str1,str2) 0
4.元组
元组和列表类似,和字符串一样是不可变的
元组通过小括号中用逗号分割的项目定义
元组的值不会改变(整体修改后即变成另外一个元组)
先来看这样一个例子:
假设:userinfo=”jack 30male”,我们要把其中的名字“jack”取出来,可以使用切片的方式,userinfo[:4],又定义userinfo1=”liu 25 female”,使用同样的切片方式userinfo1[:4]取出来的是“liu ”,还包含空格,不精确,或者也可以使用userinfo1[:3],但这样一来,针对不同长度的字符串,无法做到用同一种切片格式来获取,这样,我们就需要借用元组来实现了。
元组的定义:使用小括号,元素之间用“,”隔开,内容可以为空
>>>t=("jack",30,"male") >>> t[0] ‘jack‘
即小括号中每一个用逗号隔开的字符串被当作一个字符,可以使用索引或切片的方式将其取出
注意:如果元组中只有一个元素,也要使用“,”分开
>>>t2=(2,) //不要忘记“,”否则会被当作整型 >>> type(t2) <type ‘tuple‘>
元组的拆分:使用对应数量的变量接收元组中对应元素的值
>>>t=("jack",30,"male") >>> name,age,gender=t >>> name ‘jack‘ >>> age 30 >>> gender ‘male‘
5.列表
列表是处理一组有序项目的数据结构,即可在一个列表中存储一个序列的项目
列表是可变类型的数据
列表的组成:用[]表示列表,包含多个以逗号分割开的数字,或字符串
List=[‘Tom’,’Jerry’,’Mary’] List=[1,2,3,4,5] List=[“str1”,“str2”, “str3”, “str4”, “str5”, “str6”]
列表的操作
取值:
切片或索引
list[]
添加:
list.append()
>>>listtest [‘Jerry‘, 30, ‘male‘] >>> listtest.append("1234567") >>> listtest [‘Jerry‘, 30, ‘male‘, ‘1234567‘]
删除:
del(list[])
[‘Jerry‘,30, ‘male‘]
>>> del(listtest[1]) >>> listtest [‘Jerry‘, ‘male‘] list.remove(list[]) >>>listtest [‘Jerry‘, 30, ‘male‘, ‘1234567‘] >>> listtest.remove(‘1234567‘) >>> listtest [‘Jerry‘, 30, ‘male‘]
修改:内存空间不会变
list[]=x
>>>listtest=[‘tom‘,30,‘male‘] >>> listtest[0] ‘tom‘ >>> listtest[0]=‘Jerry‘ >>> listtest [‘Jerry‘, 30, ‘male‘]
查找
var in list
6.字典
字典是python中唯一的映射类型(哈希表)
字典的对象是可变的,但是字典的键必须使用不可变对象,并且一个字典中可以使用不同类型的键值。
keys()或者value()返回键列表或者值列表
items()返回包含键值对的元组
创建字典
{}:最常用的方法
>>>dict={‘name‘:‘tom‘,‘age‘:25,‘gender‘:‘male‘} >>> dict {‘gender‘: ‘male‘, ‘age‘: 25, ‘name‘: ‘tom‘}
使用工厂方法dict():
例:fdict=dict([‘x’,1],[‘y’,2])
内建方法:fromkeys(),字典中的元素具有相同的值,默认为None
例:ddict={}.fromkeys((‘x’,’y’),-1)
访问字典
直接使用key访问:key不存在会报错,可以使用has_key()或者in和not in判断,但是had_key()方法即将废弃。
循环遍历:
例:for key indict1.keys():
使用迭代器:
for key in dict1:
更新和删除:
直接用键值访问更新;内建的update()方法可以将整个字典的内容拷贝到另一个字典中。
>>>dict={‘name‘:‘tom‘,‘age‘:25,‘gender‘:‘male‘} >>> dict {‘gender‘: ‘male‘, ‘age‘: 25, ‘name‘: ‘tom‘} >>> dict[‘tel‘]=‘12345678‘ //新增一个key取名为’tel’,赋值为’12345678’ >>> dict {‘gender‘: ‘male‘, ‘age‘: 25, ‘tel‘: ‘12345678‘, ‘name‘: ‘tom‘} >>> dict[‘tel‘]=‘88888888‘ //修改’tel’的值为’88888888’ >>> dict {‘gender‘: ‘male‘, ‘age‘: 25, ‘tel‘: ‘88888888‘, ‘name‘: ‘tom‘}
注意:字典中元素排列是无序的,取值与key有关
deldict1[‘a’]删除字典中键值为a的元素
>>>del(dict[‘tel‘]) >>> dict {‘gender‘: ‘male‘, ‘age‘: 25, ‘name‘: ‘tom‘}
dict1.pop(‘a’)删除并且返回键为’a’的元素
>>>dict.pop(‘age‘) 25 //返回age的值,并将’age’这个key和对应值删除 >>> dict {‘gender‘: ‘male‘, ‘name‘: ‘tom‘}
dict1.clear()删除字典所有元素
>>>dict.clear() >>> dict {} //字典内容被全部清空
deldict1删除整个字典
字典相关内建函数:
type(),str(),cmp()(cmp很少用于字典的比较,比较依次是字典的大小、键、值)
工厂函数dict():
dict(zip(‘x’,’y’),(1,2))或者dict(x=1,y=2)
使用字典生成字典比用copy慢,推荐使用copy()。
字典中方法总结
len(),hash()(用于判断某个对象是否可以做一个字典的键值,非哈希类型报 TypeError错误)。
dict.clear():删除字典中的所有元素。
dict.get(key,default=None):返回key的value,如果改键不存在则返回default指定的值。
dict.fromkeys(seq.val=None):以seq中的元素为键创建并返回一个字典,val为指定的默认值。
dict.has_key(key)判断字典中是否存在key,建议使用in和not in代替。
dict.items():返回键值对元组的列表。
dict.keys():返回字典中键的列表。
dict.iter*():itertems(),iterkeys(),itervalues()返回迭代值而不是列表。
dict.pop(key[,default]):同get(),区别是若key存在,删除并返回dict[key],若不存在且未指定default值,则提示KeyError异常。
dict.setdefault(key,default=None):同set(),若key存在则返回其value,不存在则dict[key]=default。
dict.uppdate(dict2):将dict2中的键值对添加到字典dict中,如果有重复覆盖,原字典不存在的条目将被添加进来。
dict.values():返回字典中所有值的列表。