(3)基本数据类型(字符串、列表、字典、元组、集合)以及切片和常用操作

基本数据类型--数字

bool(布尔型)

只有两个值True和False,之所以将bool归类为数字,是因为我们习惯用1表示True,0表示False

int类型

Python中的整数属于int类型,默认用十进制表示,此外也支持二进制,八进制,十六进制表示方式

float(浮点数)

Python中的float(浮点数)就是数学中的小数(float是有限小数或无限循环小数),在运算中整数和浮点数运算的结果也是一个浮点数 一个浮点数的小数点位置是可变的,Python默认的小数精度是17位,也就是小数点后面16位,越往后越不准。其他语言也同样的问题。小数不精准是因为在转换成二进制的过程中会出现无线循环,在约省的时候就会出现偏差

 

基本数据类型--字符串

字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,''或'' ''或''' '''中间包含的内容称之为字符串,字符串只能存一个值,而且是不可变

PS:字符串比较特殊,虽然是不可变的,但是可以被迭代

 

字符串的操作

切片格式:s[start_index:end_index:strp]: 表示对变量s进行切片索引,start_index表示起始位置,end_index表示结束位置,strp则表示步长

PS:正向索引时候因为是从0开始,所以0-7显示的对应值其实就是0-6的值。参考索引位置

PS:反向索引是从1开始计数

 

按索引取值(正向取+反向取) :只能取

s1="hello world"

s1[0]  #索引0号位置的值

s1[-1]  #反向索引第一个值

s1[-3]  #反向索引第三个值

print(s1[-1:-4:-1])  #反向索引1-4的值

 

切片(顾头不顾尾从大字符串中切出一个子字符串)

例:顺序切片

s=abcdefghijklmn s[0:7:2]   #则表示从0-7,步长2,就是从每两个位置取一个值,输出则是aceg

例:反转切片

s=abcdefghijklmn s[::-1]   # 倒过来索引,其实就是把值反过来输出nmlkjihgfedcba

例:顺序切片

s=abcdefghijklmn s[::2]    #则表示从开始到结束(len的长度范围呢),步长2,就是每两个位置取一个值,输出则是acegikm

例:反转切片

s=abcdefghijklmn s[::-1][0:7]   # 先将s的值倒过来索引,然后输出0-6位置的值

例:反转切片

s=abcdefghijklmn s[:2][::-1]    #先取前两位的值,再倒过来输出

PS:字符串的单引号和双引号都无法取消特殊字符的含义, 如果想让引号内所有字符均取消特殊意义,在引号前加r。 如name = r‘l\thf’

PS:unicode字符串与r连用必须在r前面,如name=ur'l\thf'

 

len(s1)  #查看字符串的长度

 

成员运算in和not in:判断一个子字符串是否存在于一个大字符串中

msg='my name is alex,alex is dsb'   #判断一个字符串是不是在另一个字符串中

print('alex' in msg)

print('egon' not in msg)

 

移除

移除空白strip: 移除字符串左右两边的字符 (lstrip和rstrip分别是移除左边和右边)

name=input('username>>>: ').strip()   #这是一种操作,直接在input函数后面跟strip方法,移除用户输入的字符前后的空格,括号内可以指定一个

name=name.strip()   #也可以这样重新赋值一次,如果在strip(' * ')括号内指定字符,则可以去除字符串前后被指定的字符,可以指定单个,也可以指定多个 print(msg.strip('*&^$/-?#='))

if name == 'egon':

print('认证成功') 

 

切分

切分split: 把一個有規律的字符串按照某個字符進行切分,切成列表  # rsplit表示从右边开始

info='root:x:0:0::/root:/bin/bash'

res=info.split(':',maxsplit=-1)   #如果maxsplit这个参数没有指定或者是-1,这时分割次数不会有限制

print(res)

 

info=''   #将下列列表,换成:

userinfo=['root', 'x', '0', '0', '', '/root', '/bin/bash']

for item in userinfo:  #即

    item+=':'

    info+=item

    info=info.strip(':')

    print(info,type(info))

#用join方法将 ‘,’换成‘:‘

userinfo=['root', 'x', '0', '0', '', '/root', '/bin/bash']

res=':'.join(userinfo)

 

循环

msg='hello'

for item in msg:

    print(item)

 

讲字符串转换成小写或大写

lower() #将字符串全部变成小写,upper()  #将字符串全部变成大写

x='ABBBBddd1231'

print(x.lower())

print('ABBBBddd2123'.upper())

 

查找指定字符开头或自定字符结尾的字符串

startswith() ,endswith()  #satrtswith()括号内添加指定的值,就以这个指定的值查找相关开头的字符串,endswitch()括号内添加指定的值,就以这个指定的值查找相关开头的字符串

print('alex is sb'.startswith('alex'))

print('alex is sb'.startswith('al'))

print('alex is sb'.endswith('sb'))

 

格式化字符串传入参数

几种方式

msg='my name is %s my age is %s' %('egon',18)  #这个利用占位符%来传入

msg='my name is {name} my age is {age}'.format(age=18,name='egon') #这个利用format()函数来传入

msg='my name is {} my age is {}'.format(18,'egon')   #利用format传入,如果没有指定传入参数,那就按照位置传入,有点类似占位符%的原理

msg='my name is {0} my age is {0}{1}{1}'.format(18,'egon')  #利用format传入,在想要传入值得位置写入数字,那就按照数字的排序对应format括号里值得位置排序传入

 

替换字符串内的某个值

msg='alex is alex hahahah alex'

res=msg.replace('alex','SB',1)

 

 

 

什么是列表

在[]内用逗号分隔,可以存放n个任意类型的值,而且可以被迭代

列表的定义:[]内已逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素

students=['egon','alex','wupeiqi',]

用于标识:存储多个值的情况,比如一个人有多个爱好

 

列表的创建

list_test = ['张三','李四','alex']

#或

list_test = list('alex')

#或

list_test = list(['张三','李四','alex'])

 

列表的特点

特性:

1、可存放多个值

2、按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序的访问

3、可修改指定索引位置对应的值,可变,可迭代

 

列表嵌套和取值

存放多个学生的信息:姓名,年龄,爱好
students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]]
students_info[0][2][0] #取出第一个学生的第一个爱好

 

列表常用操作

 索引

names=['egon','alex','kevin']

print(name[0])  #索引0号位置的值

names[-1]=1000   #修改最后一个值

names[3]='aaaa'  #修改3号位置的值

 

切片(顾头不顾尾,也包含步长)[num:num:num](start,end,step)

i = ['egon','alex','seven','yuan']

i[0:2]  # 指输出从0开始到2的所有内容

i[:2]   #由于没有指定开始位置,python会默认从0开始,所以指输出2前面所有的内容

i[2:]   #指输出2后面所有的内容

i[:]   #指输出所有的内容

i[::2]   #由于没有指定开始和结束位置,所以python会默认从0开始到最后一个值,所以指每隔2个值提取一次

i[::-1]  #指反向切片

 

列表的添加和删除

i.append('eva')   #将一个值添加到列表的末尾

i.remove('eva')   #从列表中删除一个值

i.pop()   #在括号内添加指定数字,就可以删除列表指定位置的元素.括号内可以指定

del i[0]  #用del方法直接删除指定位置的字符串

 

i.append('xxxx') #将括号内指定的字符添加至列表的末尾

i.insert(0,'chenwei') #在列表的任意位置添加内容,insert(位置,内容)

 

 

查看列表和判定列表中是否包含某个值

len(i)   #查看列表的长度

'egon' in i   #查看一个值是否包含在列表中,包含则返回True,反则False

i.count('egon') #查看指定元素在列表中出现的次数

i.index('egon'))  #计算对象在列表中索引的位置

i.sort(reverse=True)  #永久性的将列表按照顺序排列,reverse=true则表示相反,括号内不指定则默认reverse=False

i.reverse( )   #把列表元素相反打印,reversed()函数返回的是一个迭代器,而不是一个List,所以需要list函数转换一下.(参数可以是列表,元组,字符串,不改变原对象)

 

分割

>>>s = 'hello world'

>>>s.split(' ') 以空格为分隔符,分割字符串

>>>s.split(',') 以逗号为分隔符,分割字符串

PS:分隔符不限定,但是必须根据需求

 

连接

>>>i = ['hi','eva']

>>>'!'.join(i)

'hi!eva'

例 str = "-"

    seq = ("a", "b", "c")

    print str.join( seq )

    a-b-c

PS:以逗号为分隔符,将字符串以' - '符号连接

 

什么是元组

与列表相似,列表用[],元组是()表示,元组相当于不可变的列表

如果存的多个值只有取的需求没有改的需求,用tuple最合适,占用内存最小

特性

1、可存放多个值,而且可存放数字、字符串,还可以存放更加复杂的数据类型

2、元组本身不可修改和改变,如果元组中包含其他可变元素,这些元素可改变

3、按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序的访问

 

创建元组

ages = (1,2,3,4,5,6)

#或

ages = tuple(1,2,3,4,5,6)

 

元组的常用操作

索引

>>>ages = (1,2.3,4,5,6)

>>>ages[0]

1

>>>ages[-1]  #反过来索引,第一个位置

6

 

切片

同list

 

循环

for age in ages:

print(age)

 

长度

len(ages)

 

包含

1 in ages  #包含返回True,反则返回False

 

什么是字典

在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型

定义:info={'name':'egon','age':18,'sex':18}    #info=dict({'name':'egon','age':18,'sex':18})

用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值

字典是Python语言中唯一的映射类型

 

定义方式:{key1:value1,key2:value2}

1、键与值用冒号分开‘:’

2、项与项用逗号分开‘,’

 

字典特性:

1、key-value(键:值的结构)

2、key必须可hash,且必须为不可变数据类型,必须唯一

3、可存放任意多个值、可修改、可以不唯一

4、无序

 

字典的创建与常见操作

#字典的创建

person = {“name”:”alex”,”age”:20}

#或

person = dict(name='seven',age=20)

#或

person = dict({“name”:”egon”,'age':20})

#或

person = dict((['name','圆圆'],['文州',18]))

 

注意:

>>>dic = {}.fromkeys(['k1','k2'],[]) #如果这里指定键但是不指定值,那么值的默认值就是空none

>>>dic {'k1':[],'k2':[]}

>>>dic['k1'].append(1)

>>>dic {'k1':[1],'k2':[1]}

 

字典的常见操作

键、值、键值对

1、dic.keys() 返回一个包含字典所有key的列表

2、dic.values() 返回一个包含字典所有value的列表

3、dic.items() 返回一个包含所有(键,值)元组的列表

4、dic.iteritems()、dic.iterkeys()、dic.itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表

 

新增

dic[key] = value

dic.update('xxx)    #将括号中的所有元素添加到字典中,t可以是另一个集合,一个序列或者支持迭代的任意对象

{}.fromkeys(x,None)  #fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值   ---Python的语法解释

 

查找

1、dic.setdefault(key,None)  #查找字典中的key对应的值,如果字典中不存在key键,则新增这个键,默认None也可以指定,如果存在键则返回对应的值

2、dic.get(key(default=None))  #返回指定键的值,如果键不在字典中,返回一个指定值,默认为None,并不会添加

 

删除

1、dic.pop(key[,default])和get方法相似。如果字典中存在key,删除并返回key对应的value,如果key不存在,且没有给出default的值,则引发keyerror异常

2、dic.clear() 删除字典中的所有项或元素

3、del dic[key]

4、dic.popitem()   #Python 字典 popitem() 方法随机返回并删除字典中的一对键和值。如果字典已经为空,却调用了此方法,就报出KeyError异常

 

修改

1、dic['key'] = 'new_value' 如果key在字典中存在,‘new_value’将会替代原来的value值

2、dic.update(dic2) 将字典dic2的键值对添加到字典dic中

dic={'name':'egon','age':18}  

dic['age']=111   #如字典中存在,按照key来修改value的值

dic['sex']='male'  #如字典中不存在则新增

 

查看

1、dic['key'] 返回字典中key对应的值,若key不存在字典中,则报错

2、dict.get(key,default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)

 

循环

1、for k in dic.keys()  #遍历字典中所有的键

2、for k,v in dic.items() #遍历字典所有键,值

3、for v in dic.values() #遍历字典中所有的值 

3、for k in dic  #遍历整个字典

按顺序遍历字典中的所有键for k in sorted(dic.keys()),使用函数sorted()来获得按特定顺序排列的键列表的副本

如果字典中值很多,最终输出的列表含大量的重复项,使用(set)集合来剔除,for x in set(dic.values())

 

长度

len(dic) #查看字典长度

 

 

#3、成员运算in和not in :判断的是key
# dic={'name':'egon','age':18}
# print(18 in dic)
# print('age' in dic)

 

 

字典的嵌套

 

info={
    'name':'egon',
    'hobbies':['play','sleep'], 
    'company_info':{
        'name':'Oldboy',
        'type':'education',
        'emp_num':40,
    }
}
print(info['company_info']['name']) #取公司名


students=[
    {'name':'alex','age':38,'hobbies':['play','sleep']},
    {'name':'egon','age':18,'hobbies':['read','sleep']},
    {'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},
]
print(students[1]['hobbies'][1]) #取第二个学生的第二个爱好

字典、列表、元组的区别

字典用 { } 表示、列表用 [ ] 表示、元组用() 表示

 

什么是集合

集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合

集合中的元素有三个特征

1、确定性(元素必须可hash)

2、互异性(去重)

3、无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,4,5]算作同一个集合

PS:集合存在的意义就在于去重和关系运算

 

结合的用途

关系运算,去重

定义方式:在{}用逗号分割开多个元素,但是集合内元素的特点

 

去重的局限性:

被去重的元素必須是不可變類型

不能保證原來的顺序

 

in 和not in   #判断某元素是否在集合内

==和!=        #判断两个集合是否相等

PS:两个集合之间一般有三种关系,相交、包含、不想交。在Python中分别用下面的方法判断

set.isdisjoint(s):   #判断两个集合是不是相交

set.issuperset(s): #判断集合是不是包含其他集合,等同于a>=b

set.issubset(s):  #判断集合是不是被其他集合包含,等同于a<b

 

常用操作+内置的方法

 

长度   len(set)

 

合集(|):取两个集合合并后的结果

A | B

A.union(B)

A.update(B)

 

交集(&): 取两个集合共同的部分

A & B

A.intersection(B)

A.intersection_update(B)   #用于移除两个或更多集合中都不重叠的元素,即计算交集, intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素

 

差集(-): 取存在于左(右)边结合但不存在与右面集合的元素

A - B)

A.difference(B)

 

对称差集(^):例如:取没有同时在A和B中的值

(A - B) | (B - A)

A ^ B

A.symmetric_difference(B)

 

 

关系运算

==

s1={1,2,3}

s2={3,2,1}

print(s1 == s2)

 

父集:>=

子集:<=

s1={1,2,3,4}

s2={1,2,3}

print(s1 >= s2)

print(s1.issuperset(s2))   #issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False

print(s2.issubset(s1))      #issubset() 方法用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False

 

集合類型其他内置方法(**)

s1={'a','b','c',‘d’}

print(s1.pop())   #随机弹出一个值,类似于删除

s1.discard('d')     #discard() 方法用于移除指定的集合元素。该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会

 

s1.add('d')

print(s1)

s1={1,2,3}

s2={6,4,5}

print(s1.isdisjoint(s2))    #isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False

 

列表、元组、字典、集合的区别

列表:用[ ]表示,可修改

元组:元组和列表在结构上没有什么区别,唯一的差异在于元组是只读的,不能修改。元组用“()”表示

字典:字典定义了键和值之间一对一的关系,但它们是以无序的方式储存的。定义 Dictionary 使用一对大(花)括号“{ }”

集合:是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.由于集合是无序的,所以,sets 不支持 索引, 分片, 或其它类序列(sequence-like)的操作

 

集合的常用操作

元素的增加 单个元素的增加add(),add的作用和类似列表中的append

对序列的增加update(),而update类似extend方法,update方法可以支持同时传入多个参数,传入时会把字符串拆分并无序排列

PS:由于集合有去重功能,所以update在传入多个参数时候会去除相同的参数,而数字是会顺序排列,字符串时随机排列

 

集合中元素的删除

元素的删除 set.discard(x)  #从set中删除指定的元素x,如果x不在set中,无任何反应

set.remove(x)   #从set中删除指定的元素x,如果x不在set中,则会报错Traceback

set.pop()      #从set中随机删除一个元素,如果set为空,则会报错Traceback

set.clear()    #将set中的所有元素清空

 

PS:可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典

PS: 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间),如元组

 

posted @ 2018-10-23 14:48  clyde_S  阅读(1921)  评论(0编辑  收藏  举报