数据类型划分

分为可变数据类型和不可变数据类型

不可变数据类型(又叫可hash):

元祖,布尔值,int数字,字符str(对str的任何操作都是形成了一个新的str)

可变数据类型(不可hash):

list列表,字典,set集合

列表

  列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:

li = [‘alex’,123,Ture,(1,2,3,’wusir’),[1,2,3,’小明’,],{‘name’:’alex’}]

  列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。

增:

  增加对列表操作,没有返回值,直接无法打印

insert

#插入到指定位置中

li = [1,'a','b',2,3,'a']
li.insert(0,55) #按照索引去增加,在指定位置增加
print(li)

append

#一次只能添加一个元素
#添加到列表的最后
li.append('aaa') #增加到最后
li.append([1,2,3]) #增加到最后
print(li)

extend

li = ['authur' , 'yxd']
li.extend(['q,a,w']) #迭代的去增,列表以每个最小单位添加,
print(li)
li.extend('qwe')
print(li)
#['authur', 'qwe', 'q,a,w']
#['authur', 'qwe', 'q,a,w', 'q', 'w', 'e']

不能迭代int,可以将数字放在列表中添加
li = ['authur','qwe']
li.extend(123) #这样会报错,'int' object is not iterable

可以在列表中迭代
li = ['authur','qwe']
li.extend([123,'asd'])
print(li)
['authur', 'qwe', 123, 'asd']

删:

pop

#按照索引去删除,默认不写是删除最后一个。有返回值,返回值为删除的那个元素,也是列表操作中唯一有返回值的。
li = ['arthur',21]
print(li.pop(1))
21

del

#按照位置去删除,也可切片删除没有返回值。如果没有切片,将整个列表删除
li = ['arthur','qwe',21]
del li[0:2]
print(li)
[21]

li = ['arthur','qwe',21]
del li #直接删除列表
print(li) #print会报错,因为直接从内存删除了列表

remove

#按照元素去删除,
li = ['arthur','qwe',21]
li.remove('arthur')
print(li)
['qwe', 21]

clear

#清空列表
li.clear() #此时列表为空列表

将指定的一个值或是切片的范围值替换为指定的元素

指定位置更改

li = [1,'a','b',2,3,'a']
li[1] = 'Arthur'
print(li)
[1, 'Arthur', 'b', 2, 3, 'a']
#会将指定的位置元素替换为输入的元素,可以是列表等等

切片范围更改

切片是将所选范围替换掉,更改任意多个新的元素,以最小单位去迭代,字符串是以每个字符,列表是以每一位。和extend效果一样,也不可以直接迭代int,可以借助列表

li = [1,'a','b',2,3,'a']
li[0:2] = 'yxd'
print(li)
['y', 'x', 'd', 'b', 2, 3, 'a']
#将选择的切片范围去掉,以迭代的方式将指定的内容写入列表中
切片添加列表
li = [1,'a','b',2,3,'a']
li[0:2] = ['qwe',123,'Arthur',['qwe',123,'Arthur']]
print(li)
['qwe', 123, 'Arthur', ['qwe', 123, 'Arthur'], 'b', 2, 3, 'a']
#可以发现,列表是以最小单位迭代的,所以替换字符串的时候可以使用列表来实现,而列表中的列表依旧是列表,没有被拆分。

查:

切片去查,或者循环去查。

可以遍历列表查

li = ['authur','yxd','21']
for i in li:
    print(i)
#查看前两个元素
print(li[0:2])

列表的嵌套:

现在要显示zxc的x,思想就是,先找到列表中的列表,再找具体的字符串

li = ['arthur' , 'zxc' , '我去', ['qwe','asd',92],23 ]
print(li[1][1])
x

找到arthur,首字母大写,再放回去

li[0]=li[0].capitalize()
print(li)

找到我去,改成我不去

li[2] = '我不去'
li[li.index('我去')]= li[li.index('我去')].replace('去','不去')
print(li)

找到qwe,全部变成大写,再放回原处

li[3][0] = li[3][0].upper()
print(li)

元组:

元组被称为只读列表,即数据可以被循环查询,但不能被修改,所以,字符串的切片操作同样适用于元组。例:(1,2,3)("a","b","c")

元组的直接元素不能更改,元组元素的元素可以修改,例如元组中的列表的元素可以改,但是列表本身不能改

li = ('authur' , 'yxd' , '我去' , ['qwe','asd',92],23 )
print(li[2])
print(li[1:3])
#遍历元组
for i in li:
    print(i)
#修改元素中的列表
li[3][1] = li[3][1].upper()
print(li)
('authur', 'yxd', '我去', ['qwe', 'ASD', 92], 23)
#追加元素到元祖中的列表
li[3].append('Authur')
print(li)

字典

唯一的映射数据类型,由键值对组成,一个键对应一个值,一个key对应一个value,

字典的key必须是不可变数据类型,value是任意

 

dict优点: 对内存的数据使用二分查找法,效率高,字典的key都会转换数字,以二分法查找,效率高

                 存储大量的关系型数据

      特点:字典是无序的,只针对3.5及以前的版本

字典举例

dic = {
    'name':['arthur','qwe'],
    'py9':[{'num':71,'avg_age':18,},
           {'num': 71, 'avg_age': 18, },
           {'num': 71, 'avg_age': 18, },
           ],
    True:1,
    (1,2,3):'wuyiyi',
    2:'ewq',
}
print(dic)

增:

 第一种方法:直接赋值

dic1 = {'age': 18, 'name': 'Arthur', 'sex': 'male',}
dic1['high'] = 185  #如果元组中没有键,则添加
dic1['age'] = 16    #如果元组中有这个键,则值覆盖
#{'age': 16, 'name': 'Arthur', 'sex': 'male', 'high': 185}

第二种方法:setdefault()

格式:setdefault(self, key, value)
特点:在添加的时候,如果字典中已经有键,则不做任何改变,如果字典中没有键值对,则添加。默认添加时,只写键不写值,值为none
dic1 = {'age': 18, 'name': 'Arthur', 'sex': 'male',}
dic1.setdefault('top','python')
dic1.setdefault('age',81)
print(dic1)
{'age': 18, 'name': 'Arthur', 'sex': 'male', 'top': 'python'}

删:

第一种方法:

格式:pop('key')

特点:删除时以key删除,有返回值,返回key对应的value

dic1 = {'age': 18, 'name': 'Arthur', 'sex': 'male',}
print(dic1.pop('age'))
18
#用法
print(dic1.pop('python','没有此键'))   #如果没有这个键,删除时可设置返回值,来判断字典中是否存在这个键,如果有键,删除时返回对应的值
没有此键

第二种方法:

格式:popitem()

特点:删除时随机删除,一般删除字典中的最后一对键值对,返回值为删除的这对键值对

dic1 = {'age': 18, 'name': 'Arthur', 'sex': 'male',}
print(dic1.popitem())
('sex', 'male')         #以元祖的方式返回键值对

第三种方法:

格式:del 字典[‘key’]

特点:删除没有返回值,如果所删的key没在字典中则报错,如果没有指定删除的key,则删除整个字典

dic1 = {'age': 18, 'name': 'Arthur', 'sex': 'male',}
del dic1['age']
print(dic1)
{'name': 'Arthur', 'sex': 'male'}
del dic1   #删除整个字典

第四种方法:

格式:字典.clear()

特点:清空字典中的内容,和del不同的是,del是在内存中删除,clear保留字典,只不过内容为空

改:

第一种方法:

直接赋值,和增的时候相同

dic1 = {'age': 18, 'name': 'Arthur', 'sex': 'male',}
dic1['high'] = 185  #如果元组中没有键,则添加
dic1['age'] = 16    #如果元组中有这个键,则值覆盖
#{'age': 16, 'name': 'Arthur', 'sex': 'male', 'high': 185}

第二种方法:

格式:字典.update(字典2)

特点:设置两个字典,对其中一个字典进行更新,会将两个字典的键值比对,如果被更新的字典有这个key,则覆盖,没有就添加

dic = {"name":"arthur","age":18,"sex":"male"}
dic2 = {"name":"python","weight":75}
dic2.update(dic)            #以dic的内容更新dic2
print(dic2)
{'name': 'arthur', 'weight': 75, 'age': 18, 'sex': 'male'}

查:

第一种方法:

直接打印,有则打印,没有报错

dic = {"name":"arthur","age":18,"sex":"male"}
print(dic['name'])
arthur

第二种方法:

get()

有key时不管后边如何设置,都会返回key对应的value,没有时,返回后边设置的值,没有设置返回none

#有这个键值时
dic = {"name":"arthur","age":18,"sex":"male"}
print(dic.get('name','没有这个键值'))
arthur
#没有这个键值时
print(dic.get('python','没有这个键值'))
没有这个键值

第三种方法:

格式:字典.keys()        以列表的形式打印字典的key

   字典.values()     以列表的形式打印字典的values

   字典.items()  以列表的方式打印,以元组存放字典的键值对

dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',}
print(dic1.keys(),type(dic1.keys()))   
print(dic1.values())
print(dic1.items())
运行结果
dict_keys(['age', 'name', 'sex']) <class 'dict_keys'>      #特殊类型,字典key,可以当做列表处理
dict_values([18, 'jin', 'male'])                             
dict_items([('age', 18), ('name', 'jin'), ('sex', 'male')])  #最小单位是元组

循环打印字典的内容:

打印字典的键:

for i in dic1: 
    print(i)
for i in dic1.keys():
    print(i)

运行结果

age

name

sex

age

name

sex

打印字典的值:

for i in dic1.values():
    print(i)

打印字典的键值对:

for k,v in dic1.items():   #使用k和v分别取值
    print(k,v)

字典的嵌套

dic = {
    'name':['Arthur','python','boa'],
    'py9':{
        'time':'2018',
        'learn_time':10,
        'addr':'CBD',
           },
    'age':21
}
# 添加一个键值为age: 56
dic['age'] = 56 
print(dic)
#{'name': ['Arthur', 'python', 'boa'], 'py9': {'time': '2018', 'learn_time': 10, 'addr': 'CBD'}, 'age': 56}
#显示name的值,以列表的形式
print(dic['name'])        
#['Arthur', 'python', 'boa']
#在name对应的值,也就是列表中,添加ritian
dic['name'].append('ritian')  
print(dic['name'])
#['Arthur', 'python', 'boa', 'ritian']

#将python转换为大写的形式 
dic['name'][1] = dic['name'][1].upper() 
print(dic['name'])
#['Arthur', 'PYTHON', 'boa']
#在py9中添加zabbix: 44 这个键值对 
dic['py9']['zabbix'] = 44 
print(dic)
{'name': ['Arthur', 'python', 'boa'], 'py9': {'time': '2018', 'learn_time': 10, 'addr': 'CBD', 'zabbix': 44}, 'age': 21}