python3中有六个标准的数据类型:
– Number(数字)
– String(字符串)
– List(列表)
– Sets (集合)
– Dictionary(字典)
– tuple(元组)
3.1数字类型:
3.1.1.数字类型:分为整形(int)、浮点数(float)和复数(complex)
整形(int):通常被称之为是整形或者整数,是正整数、负整数和0,不带小数点:如10、-56
浮点数(float):由整数部分与小数部分组成。如:2.65、3.
复数(复数):复数由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型(例如:-4的平方根)
3.1.2.类型转换
之前课程已经串讲过,当时用输入函数input()时,默认会将键入的数字1变成字符串‘1’,比如:
>>>i = input('my name is :') >>>print(type(i)) >><class 'str'>
讯享网
要将此时字符串“1”转换为整数型,可以使用int(1)的方式。同理,当要将浮点型转换为整形时,可以使用int()函数完成
讯享网>>>a = "89" >>>print(type(a)) <class 'str'>
上述例子,测试a所对应的是字符串,如果要将其转换为整数型,可以使用int(i)的方式。同理,当然要将浮点数转换为整型时,也可以用int()函数完成
[
讯享网](javascript:void(0)😉
>>>a = '46' >>>print(type(a)) <class 'str'> >>>b = int(a) >>>print(type(b)) <class 'int'>
[
](javascript:void(0)😉
浮点型转换,如果我们需要将整数
[
](javascript:void(0)😉
讯享网>>>a = '46' >>>print(type(a)) <class 'str'> >>>b = float(a) >>>print(b,type(b)) 46.0<class 'float'>
[
](javascript:void(0)😉
复数类型转换
>>>a = 3 >>>b = 4 >>>c = complex(a,b) >>>print(3) 3+4j
复数不能转换为整数、浮点型等

3.2字符串
说到字符串,我们自然会想到中文字符串。但是中文字符串涉及到一些字符集、编码、解码的问题,现在引入这些概念会吧开始的学习复杂化
所以放在后续章节,目前阶段只讨论英文字符串
3.2.1 字符串的定义
字符串可以用,单引号,双引号或者三引号括起来。其中三引号里面是可以跨行的字符串
[
](javascript:void(0)😉
讯享网#单引号 >>>auto = 'hello world' #双引号 >>>auto = "my name is Augus" #三引号 >>>auto = '''python is cool''' #三引号跨行 >>>auto = '''python is cool!'''
[
](javascript:void(0)😉
3.2.2 字符串的拼接
3.2.2.1.拼接
[
](javascript:void(0)😉
#加号连接 >>>a,b = 'hello','world' >>>a+b >>>'hello world' #逗号连接 使用逗号,只能用于print打印输出 >>>a,b = 'hello','world' >>>print(a,b) #上述代码如果进行赋值操作会生成元组 >>>a,b ("hello","world") #直接连接 >>>print("hello" "world") helloworld
[
](javascript:void(0)😉
3.2.2.2.字符串的乘法(重复n次)
讯享网>>>"sid" * 3 'sidsidsid'
3.2.2.3获取字符串的长度
len('my name is: Augus')
3.2.2.4.字符串的比较
[
](javascript:void(0)😉
讯享网>>>str1 = 'abc' >>>str2 = 'lmn' >>>str3 = 'xyz' >>>str1 == 'abc' Ture >>>str1 < str2 True >>>str2 != str3 True >>>str1 < str3 and str2 == 'xyz' False
[
](javascript:void(0)😉
当我们比较字符串大小的时候,python是按照字符的字典顺序来比较的
3.2.2.4.字符串的squence操作
我们看到字符串‘ZXCVF’,每个字符串可以用正数下标表示,也可以使用负数下标表示它们在字符串中的位置

注意:字符串截取时,数字位是从0开始,而不是从1开始。所以一个长度为n的字符串的最后一个字符的下标是n-1
我们可以截取(slice)字符串的一部分内容。截取的操作符是[ ],这个操作符如果只有一个下标参数,那么我们将得到一个字符
如果参数有两个,中间以冒号(:)隔开,将返回一段字字符串。截取操作slice有时也称为切片操作.
例如:str[start:end],我们将得到从下标start开始,到下标end结束,但不包括下标end对应字符的那部分字符串
[
](javascript:void(0)😉
>>>str = 'zxcvbnm' >>>str[0] 'z' >>>str[-7] 'z' #注意:这种情况,左含右不含 >>>str[2:4] 'cv' >>>str[-5:-3] 'cv' >>>str[3:] 'vbnm' >>>str[-4:] 'vbnm' >>>str[:3] ‘zxc >>>str[:-4] 'zxc'
[
](javascript:void(0)😉
3.2.3.字符串格式化
3.2.3.1.旧式”字符串解析(%操作符)
讯享网>>>'hello,%s is my name, I like %s' % ('Augus','footall') 'hello,Augus is my name, I like footall'
3.2.3.2.str.format
使用位置参数
要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里面有相对应的参数值即可,参数索引从0开始,
传入位置参数可用列表即可
[
](javascript:void(0)😉
>>>"my name is {},i am {} years old".format("wangwu",18) "my name is wangwu,i am 18 years old" >>>"my name is {0},i am {1} years old".format("wangwu",18) "my name is wangwu,i am 18 years old" >>>"my name is {1},i am {0} years old".format(18,"wangwu") "my name is wangwu,i am 18 years old"
[
](javascript:void(0)😉
~使用关键字参数
要点:关键字参数值要对的上,可用字典当做关键字参数传入时,字典前加即可,如下例子3
[
](javascript:void(0)😉
讯享网>>>"my name is {name},i am {age} years old".format(name ="wangwu",age = 18) 'my name is wangwu,i am 18 years old' >>>info = {
"name":"wangwu","age":18} >>>"my name is {ele[name]},i am {ele[age]} years old".format(ele=info) 'my name is wangwu,i am 18 years old' #例3:将字典当做关键字参数传入 >>>info = {
"name":"wangwu","age":18} >>>"my name is {name},i am {age} years old".format(info) 'my name is wangwu,i am 18 years old'
[
](javascript:void(0)😉
3.2.3.3.字符串插值/f-string
在python3.6中添加一个新的字符串格式化方法,被称为字面量格式化字符串或者"f-string"。
[
](javascript:void(0)😉
>>>name = badboy >>>f'Hello,{name}!' 'hello,badboy' >>>a=5 >>>b=10 >>>f'Five plus ten is {a+b}and not {2*(a+b)}' 'Five plus ten is 15 and not 30.'
[
](javascript:void(0)😉
3.3 列表
字符串、列表(List)和元组(tupe),三种数据类型在python中都属于Sequence(序列)这种概念
Sequence这个概念和C语言或者Java语言里面的数组特别相似。我们可以把它理解为一串数据
。其中每个数据都可以用数字索引访问。也可以切片,加,乘等。python内置了确定序列的长度len()和确定最大max()和最小min()的元素的方法
列表是python里面最常用的数据类型之一
字符串里面包含的元素是一个个的字符,并且字符串是不可更改的(你不能修改字符串里面的某个字符,只能根据它创建出新的字符串对象)
列表,它里面的每个元素都可以是任何类型的python对象并且是可以更改的!!!
3.3.1创建列表
创建一个list对象
讯享网>>>re = [56,'name','cbd',3.14] >>>print(re) [56,'name','cbd',3.14] >>>print(type(re)) <class 'list'>
通过上述例子可以得出结果,list用方括号([])创建,列表里面的元素可以是整数,小数,字符串。事实上所有类型的python对象,包括python内置对象
和自定义对象都可以存储在list里面,作为list的一个元素
创建空列表
>>>a = []
也可以这样子创建空列表
讯享网>>>a = list()
**list在python里面是一个关键字,大家千万不要定义一个变量的名字叫list。这样会导致list关键字会创建的list变量覆盖掉
3.3.2.sequence(序列)操作
和字符串一样,列表也支持切片(slice)操作。
[
](javascript:void(0)😉
>>> result = [3.14,'hello',78,['NBA','WNBA','CBA','WCBA'],{
'name':'augus','age':'18'},3+4j] >>> print(result) [3.14, 'hello', 78, ['NBA', 'WNBA', 'CBA', 'WCBA'], {
'name': 'augus', 'age': '18'}, (3+4j)] >>> result[1:4] ['hello', 78, ['NBA', 'WNBA', 'CBA', 'WCBA']] >>> result[3] ['NBA', 'WNBA', 'CBA', 'WCBA'] >>> result[:3] [3.14, 'hello', 78] >>> result[3:] [['NBA', 'WNBA', 'CBA', 'WCBA'], {
'name': 'augus', 'age': '18'}, (3+4j)] >>> result[4:] [{
'name': 'augus', 'age': '18'}, (3+4j)] >>> result[-5:-1] ['hello', 78, ['NBA', 'WNBA', 'CBA', 'WCBA'], {
'name': 'augus', 'age': '18'}] >>> result[-1:-4] [] >>> 'hello' in result True >>> '3.14' not in result True >>> result[3][2] 'CBA' >>> result[4]["name"] 'augus' >>>
[
](javascript:void(0)😉
特别注意:切片操作都是创建了一个新的列表对象作为返回值。原来的列表对象并没有改变。
像列表这种元素是任何其他类型对象的对象,我们通常会形象的吧它称之为容器(container)对象,因为它像一个容易一样用来盛放其他对象
3.4元组(tuple)
元组也是sequence对象。它具有sequence(序列)的一切特性
同样他也是一个容器对象,可以存放所有的python对象

它和列表最大的不同是:和字符串类似,它也是不可改变(immutable)。就是说元组内容创建出来以后,它的内容是不能变化的
3.4.1创建元组
元组用()来创建,里面的元素可是是整数、小数、字符串。其实所以类型的python对象,包括python内置对象和自定义对象都可以存储在元组中,
作为其中的一个元素
讯享网>>>(78,4.567,'a','NBA') (78,4.567,'a','NBA')
同意tuple也是python中的一个关键字,不能将其定义为变量名。这样会导致tuple关键字被tuple变量覆盖
3.4.2.sequence操作
既然tuple也是一种squence,那自然支持所有squence的操作
[
](javascript:void(0)😉
>>> tup = (123,'name',6.33,['mysql','sql service'],4+3j) >>> tup[0] 123 >>> tup[1:4] ('name', 6.33, ['mysql', 'sql service']) >>> tup[:3] (123, 'name', 6.33) >>> tup[3][0] 'mysql' >>> 123 in tup True >>> 'name' in tup True >>> 6.33 not in tup False >>> 6.33 in tup True >>> tup[0] = '123' Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> tup[0] = '123' TypeError: 'tuple' object does not support item assignment #元组对象不支持项分配>>>tup1 = ('google','baidu','sougou','biying')>>>tup2 = (1,2,3)#连接操作>>>tup3 = tup2 + tup1>>>print(tup3)
[
](javascript:void(0)😉
注意:切片操作都是创建了一个新的元组对象作为返回值。原来的元组对象并,并没有变
3.4.2赋值给多个变量
另外我们可以吧sequence类型的对象里面的元素赋值给多个变量
讯享网>>>a,b=(1,2) >>>c,d,e = [3,7,5] >>>print(a,b,c,d,e) 1 2 3 7 5
3.5字典
3.5.1定义字典和元素的访问
前面我们学习过list、tuple对象。可以用来存储别的对象
假设我要存储同学的年龄信息,可以创建如下的list
[ ('tom mark',14), ('Jack Mark'),15) ]
这里出现了个问题:
list这种类型的对象是通过下标来访问存储对象的,下标和元素的内容没有关系,如果我们根据某个同学的姓名查找某个同学的信息,只能根据一个个查找元素
如果存储的对象很多,显示着很不方便
为了解决这个问题,python引入了内置对象,字典(dict)对象
讯享网dict1 = {} dict2 = {'name':'augus','age':18}
上面的信息如果用字典对象存储是这样的
[
](javascript:void(0)😉
studentinfo = {
'jack ' : 16 'augus':15 } >>>print(studentinfo['augus']) 15
[
](javascript:void(0)😉
dict对象的存储也叫键值对(key-value)存储。具有如下的特点
~~dict是可变的
~~dict可以存储任意数量的python对象
~~dict可以存储任何python数据对象
~~dict以:key:value,即“键”:“值”对的形式存储数据,每个键是惟一的
~~dict根据键查找值的效率非常高
在根据key去查找value对象的时候,底层是根据key进行hash计算出一个数值,这个数值能直接得到value所在的存储位置
像dict这种根据key值找到value内容的,经常被称之为map或者hash table
dict对象的key可以是很多种对象类型,最常用的效率也是最高的是数字或者字符串
dict对象的值可是另一个dict
studentinfo = {
‘jack ’ :{‘age’:14,‘address’:‘street waltz,no2’},
‘augus’:{‘age’:18,‘address’:‘street waltz,no4’},
}
>>>print(studentinfo[‘augus’][‘age’])
3.5.2添加、修改、删除
字典对象可以像下面这样直接进行赋值来添加对象
>>>dict3 = {}
>>>dict3[2] = ‘cba’
>>>dict3[‘2’] = 3.
>>>dict[5.1] = ‘xyz’
>>>dict3
{2:‘cba’,‘2’:3.,5.1:‘xyz’}
如果赋值操作里面指定的key不存在则是添加对象,如果key已经存在,则变成了修改操作
>>>dict[2] = ‘NBA’
{2:‘NBA’,‘2’:3.,5.1:‘xyz’}
那么大家思考一下,以前的‘cba’对象到哪里去了?
和list类似,如果我们要删除dict的一个元素,可以用如下方法:
讯享网del student['name'] #remove entry with key 'name'
或者
value = student.pop('name') #remove & return entry w/key
3.5.3字典变量
例如
讯享网dict1 = {
'Google': 'www.google.com', 'baidu': 'www.baidu.com', 'biying': 'cn.bing.com/','sougou':'www.sogou.com'}
如果我需要答应出所有网站名字和具体网址,可以这样做:
[
](javascript:void(0)😉
>>> for name in dict1: print('Name:%s,URL:%s'% (name,dict1[name])) Name:Google,URL:www.google.com Name:baidu,URL:www.baidu.com Name:biying,URL:cn.bing.com/ Name:sougou,URL:www.sogou.com
[
](javascript:void(0)😉
或者使用items()函数:
Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
[
](javascript:void(0)😉
讯享网dict1 = {
'Google': 'www.google.com', 'baidu': 'www.baidu.com', 'biying': 'cn.bing.com/','sougou':'www.sogou.com'} for name,url in dict1.items(): print('Name:%s,URL:%s'% (name,url)) Name:Google,URL:www.google.com Name:baidu,URL:www.baidu.com Name:biying,URL:cn.bing.com/ Name:sougou,URL:www.sogou.com
[
](javascript:void(0)😉
3.6.集合
集合是一种序列,可以存放任意格式数据,但集合里元素不允许重复,每个元素用逗号(,)分隔,整个集合是放在花括号{}中,格式如下
s = {value1,value2,.....,valueN}
集合用于包含一组无序的对象。要创建集合,可使用set()函数并像下面这样提供一系列的项:
讯享网s = set([3,6,9,4])
或者
t = set('hello')
#注意set()函数只能放入一个参数
集合支持一系列标准操作,包括并集、交集、差集和对称差集,例如:
[
](javascript:void(0)😉
讯享网#t和s的并集 a = t | s #t和s的交集 b = t & s #求差集(项在t中,但不在s中) c = t - s #对称差集(项在t或者s中,但不会同时出现在二者中) d = t ^ s
[
](javascript:void(0)😉
基本操作
[
](javascript:void(0)😉
#添加一项 t.add('x') #在s中添加多项 s.update([10.37,67]) #使用remove可以删除一项 t.remove('j') #set的长度 len(s)
[
](javascript:void(0)😉
)函数并像下面这样提供一系列的项:
讯享网s = set([3,6,9,4])
或者
t = set('hello')
#注意set()函数只能放入一个参数
集合支持一系列标准操作,包括并集、交集、差集和对称差集,例如:
[[外链图片转存中…(img-Ox4wwACA-58)]](javascript:void(0)😉
讯享网#t和s的并集 a = t | s #t和s的交集 b = t & s #求差集(项在t中,但不在s中) c = t - s #对称差集(项在t或者s中,但不会同时出现在二者中) d = t ^ s
[[外链图片转存中…(img-SsBot2e9-62)]](javascript:void(0)😉
基本操作
[[外链图片转存中…(img-9f2hons8-66)]](javascript:void(0)😉
#添加一项 t.add('x') #在s中添加多项 s.update([10.37,67]) #使用remove可以删除一项 t.remove('j') #set的长度 len(s)
[[外链图片转存中…(img-vygzrezL-68)]](javascript:void(0)😉
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70740.html