数据类型 - 2
4、list 列表
list是Python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是用[]括起来的,每个元素以逗号隔开,而且他里面可以存放各种数据类型,比如:
li = [1,2,True,"哈哈",(1,2,3,"小明"),[1,2,3'小明'],{name:'alex'}]
列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,并且列表是有序的,有索引值,可切片,方便取值。
列表的操作:
li = ['刘德华','吴彦祖','周星驰','彭于晏'] #创建数组 print(li) # ----- 增 ----- append insert extend li.append("张艺兴") #在列表尾部追加"张艺兴" print(li) li.insert(1,"张艺兴") print(li) #在索引为1的位置插入"张艺兴" li.extend("罗志祥") #迭代着插入 print(li)# ['刘德华', '吴彦祖', '周星驰', '彭于晏', '罗', '志', '祥'] li.extend(["罗志祥"]) # 将list列表迭代 print(li) # ----- 删 ------ pop remove del clear l1 = li.pop(1) # 删除指定索引处的值 返回值为删除的元素 print(l1) li.remove("刘德华") # 删除指定元素 li.remove("123") # 不存在则报错 print(li) del li[0:5] #删除指定切片长度的元素 顾头不顾尾 无返回值 del-关键字 print(li) li.clear() #清除list中所有的元素 print(li) # [] # ----- 改 ------- 直接赋值 切片 li[0] = "张艺兴" #利用直接赋值的方式修改 print(li) li[0::2] = ["a",'b','c'] # Wrong!!步数不是1的时候,必须匹配元素个数 # attempt to assign sequence of size 3 to extended slice of size 2 print(li) # ----- 查 ------ 切片查 或者循环去查 #例如查'吴彦祖' cou = 0 for i in li: if i == "吴彦祖": print(cou) else: cou += 1 # ----- 其他操作 ------ count index sort reverse # count() 方法用于统计某个元素在列表中出现的次数 cou = li.count('刘德华') print(cou) # index()方法用于从列表中找到某个值第一个匹配项的索引 cou = li.index("周星驰") print(cou) # sort()方法用于在原位置对列表进行排序 默认升序 li_1 = [3,2,1,5,7,6] li_1.sort() #升序 li_1.sort(reverse=True) #降序 print(li_1) # reverse() 将列表中的元素反向存放 li.reverse() print(li)
列表的嵌套:使用降维操作,一层一层看
lst = [1, "太白", "wusir", ["马虎疼", ["可口可乐"], "王剑林"]] # 找到wusir print(lst[2]) # 找到太白和wusir print(lst[1:3]) # 找到太白的白字 print(lst[1][1]) # 将wusir拿到. 然后首字母大写. 再扔回去 s = lst[2] s = s.capitalize() lst[2] = s print(lst)
5、tuple 元组
元组和元组的嵌套:
元组:俗称不可变的列表,又称只读列表,元组也是Python的基本数据类型之一,用小括号括起来,里面可以放任何数据类型的数据,可以查询,可以循环遍历,可以切片,但就是不可以修改
tu = (1, "太白", "李白", "太黑", "怎么黑") print(tu) print(tu[0]) print(tu[2]) print(tu[2:5]) # 切片之后还是元组 # for循环遍历元组 for el in tu: print(el) # 尝试修改元组 # tu[1] = "马虎疼" # 报错 'tuple' object does not support item assignment tu = (1, "哈哈", [], "呵呵") # tu[2] = ["fdsaf"] # 这么改不行 tu[2].append("麻花藤") # 可以改了. 没报错 tu[2].append("王剑林") print(tu)
关于不可变, 注意:
元组中如果只有一个元素. 一定要添加一个逗号, 否则就不是元组
元组也有count(), index(), len()等方法. 可以自己测试使用
range:
range可以帮我们获取到一组数据. 通过for循环能够获取到这些数据. 顾头不顾尾
for num in range(10): print(num) for num in range(1, 10, 2): print(num) for num in range(10, 1, -2): print(num)
6、dict 字典
字典(dict)是Python中唯一一个映射类型,是以{}括起来的键值对组成。
在dict中key是唯一的,在保存中,根据key来计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为哈希算法。
key:必须是可哈希的,也就是不可变的(int str tuple bool),为了能准确计算内存地址而规定的。
dict保存的数据不是按照我们添加进去的顺序保存的,是按照哈希表的顺序保存的,而哈希表不是连续的,所以不能进行切片工作,只能通过key来获取dict中的数据。
字典的操作:
#dict - 字典 由key:value组成,用{} #其中key取值:不可变类型(例如str、int、bool、tuple),即可哈希 value:任意类型 #dict的创建: dic = {'name':'xin','age':18,'address':'beijing'} # print(dic) #dict 的操作 -- 增删改查 # ------ 增 ------- # ① dic['sex'] = 'male' #key值不存在直接新增 print(dic) dic['name'] = 'liang' #key值存在则进行覆盖 print(dic) # ② 设置默认值 dic.setdefault('sex') #只写一个key,value默认为None print(dic) dic.setdefault('sex','male')#key值不存在直接新增 print(dic) dic.setdefault('name','liang') #key值存在则不进行任何操作 print(dic) # ----- 删 ----- clear() pop(key) popitem() del dic.clear() #清空内容 print(dic) # {} dic.pop('name') #删除key = name 的键值对 dic.pop('123') #key不存在报错 KeyError: '123' print(dic) print(dic.popitem()) #结果为 ('age', 18) key value元组 k,v = dic.popitem() #解构 数量必须匹配 print(k,v) #k = name v = xin del dic['name'] #删除key = name的键值对 print(dic) # ------- 改 ------- dic['name'] = 'liang' #直接修改 dic2 = {'name':'xin','age':32,'id':1,'family':4} dic.update(dic2) print(dic) # dic 相对于 dic2 中 key值存在,则dic2覆盖value值,不存在,则新增到dic中 print(dic2) #dic2 不变 # ------- 查 ------- print(dic['name']) #根据key输出value print(dic['123']) #key不存在报错 print(dic.get('123','不存在')) #key不存在则输出'不存在' # ------- 其他操作 ----- print(dic.keys()) #输出所有的key,结果是 dict_keys(['address', 'name', 'age']) print(dic.values()) #输出所有的value li = dic.items() #dict_items([('name', 'xin'), ('age', 18), ('address', 'beijing')]) for k,v in li: #遍历 print(k,v)
7、set 集合
保存大量数据,不可以重复