- List
- 八字口诀 : 建-增删改查操-切复
#五大金刚 : list、str、tuple、set(集合)、dict(字典)
#=====八种玩法=====
#【建】创建 - [],list(),range()
#【增】添加元素:append,insert,extend,+
#【删】删除元素的方法:del,pop,remove
#【改】修改元素的值
#【查】查询元素 [],index()
#【操】操作:loop,max,min,sum,sort,reverse
#【切】切片操作 start:end:step
#【复]推导式,map,filter - String
- Dict
- Tupple
- Set
List
八字口诀 : 建-增删改查操-切复
#五大金刚 : list、str、tuple、set(集合)、dict(字典)
#=====八种玩法=====
#【建】创建 - [],list(),range()
#【增】添加元素:append,insert,extend,+
#【删】删除元素的方法:del,pop,remove
#【改】修改元素的值
#【查】查询元素 [],index()
#【操】操作:loop,max,min,sum,sort,reverse
#【切】切片操作 start:end:step
#【复]推导式,map,filter
建-增-删
#建 - [],list(),range()names_1 = ['zhangsan','lisi','wangwu']#建2 list()可接受 iterable 可遍历的对象names_2 = list() #创建一个空列表names_2 = list(range(5)) #可以接受rangenames_2 = list((1,2,3,4,5)) #元组names_2 = list('maishu')#增 append,insert,extend,+names = []names.append('maishu')names.append('maiershu')names.append(3)names.append((3,5,4))print(names)#增2 insertnames.insert(3,886)#插入下表超过长度,放在长度#增3bad_guys = ['麦叔',"小麦"]# names.append(bad_guys) #作为元素插入names.extend(bad_guys) #extend方法# names += bad_guys #等同于extendprint(names)#删1 del 运算符,不需要括号#根据下标来删除#根据内容来删除# del names[4]#删2 pop#1. 默认删掉最后一个#2. 可以指定下标#3. 会返回pop值#4. 下标索引越界,会抛出index 异常# names.pop(10)#删3 remove #1. 只会删除第一个符合条件的数据#2. 没有符合条件的,则抛出value Error#3. 若要全部删除,可用if 判断列表中是否有该元素if'xx' in names: names(remove('xx'))print(names)names.remove('maishu')print(names)
查-操
#查 : 查询元素[], index(), len()#查 1: 下表从0开始,也可从-1开始(-1代表最后一个)#下标越界会出现index error#查2 由名字查下标# 1. 如果有多个,查到第一个# 2. 如果不存在,则抛出value errorprint(names.index('maishu'))#查3 #通过 in ,not in 来判定if(886 not in names): names.append(886)else: names.index(886)#查4 len()print(len(names))#操:操作 loop,+,*,sort,reverse,max,min#操1: loop# for n in names:# print('hello,',n)# for index,n in enumerate(names):# print(f'NO{index} is {n}')#操2: 基本运算 + * ==scores = [87,25,69,89]print(names+scores) #与extend效果相同print(scores * 3)#操3:print(scores)#会修改原列表scores.reverse()print(scores)scores.sort()print(scores)scores.sort(reverse=True)print(scores)#创建新的列表print(sorted(scores))print(sorted(scores,reverse=True))#排序进阶names_scores = [('zhangsan',87),('maishu',100),('lisi',88)]print(sorted(names_scores))#字符串的比较,字符串以此比较,按照字符顺序,前面一样大,长的算大#通过 key 指定排列print(sorted(names_scores, key=lambda n:n[1]))#操 4 :print(max(scores))print(min(scores))print(sum(scores))
切-复
#切片操作 start:end:step a = 'maishu'#1. 取单个数字print(a[3])#2. 取子串 a[start:end]不包括endprint(a[3:7]) #3. start end 取负数print(a[-3:None])#4. start 大于 endprint(a[4:3])#返回空字符串#5. 空的start或endprint(a[2:])#6. 可用None代替空的startprint(a[None:3])#复 : 推导式,comprehension map filter# print(names)# names2 = names[:]nums = list(range(100))# print(nums)sq_nums = [n*n for n in nums]# print(sq_nums)nums_3 = [n+8 for n in nums if n%3==0]print(nums_3)print(list(map(lambda n:n+8, nums)))
String
基 - 建
# 基 1.字符串是一个字符序列(sequence),2.基于utf-8编码 -- 中文不会出现乱码 3. 对应str类#编码:1.ASCII 256个字符 2. ISO-9995-2 3.ANSI 4.GBK,GB2312 5.UTF-8 包含了已知所有字符# 字符串为序列# for n in 'helloworld':# print(n)#打印字符串操作方法# print(dir(str))#小练习:给一个字符串,找出里边所有o的个数string = 'helloworld'num = 0for n in string: if n == 'o': num += 1# print(num) #2. 建#2.1 简单创建zs = '张三'ls = "李四"ww = '''王五dsfsf'''#2.2 转义字符,引号的相互嵌套zs2 = '张\t三'ls2 = 'lisi\'s'ww2 = "wangwu's"#2.3 构造方法score = str(48)
增-删改-查
#3 增:字符串是immutablename = 'zhangsan'# name[-1] = 'm' 不可修改# name2 = 'zhangsan' + 'm'name2 = name[:-1] + 'm'print(name2)#字符串被重用#同一个字符串在内存中只有一个name3 = namename4 = 'zhangsan'print(id(name))print(id(name3))print(id(name4))
#删 - 不可能的#改 - 不可能的#6查 #6.1 通过下标来访问一个字符shame = '打工是不可能打工的'print(shame[5])#6.2 子串是否存在 - numbership: in,not in# print('可能' in shame)# print('可能w' in shame)print('可能w' not in shame)# identity : is ,is notprint(type(shame) is str)#6.3 开头 结尾print(shame.startswith('打工'))print(shame.endswith('的'))#6.4 所在的下标print(shame.index('可能'))#找出所有姓张的名字ls = ['张三','李四','王五','张长利','施耐庵']for index,name in enumerate(ls): if name.startswith('张'): print(f'第{index+1}个名字为:{name}')
操
# 7 操作#格式化输出name = 'zhangsan 'greeting = 'hello,'+name + ',吃了吗'g2 = 'hello,{name},吃了吗?'print(g2.format(name=name))#拆分# names = '张三,李四,王五,张长利,施耐庵'# for n in names.split(','):# print(n) #合并h ='hello'names2 = ['张三','李四','王五','张长利','施耐庵']print(" - ".join(names2))# print(h.join(name))#输出:zhellohhelloahellonhelloghelloshelloahellonhello #查找:出现次数,REnameniao = '我是一只小小小小小鸟'name.count('小')#改变大小写zhangsan = 'zhangsan is a Cool Boy'#字符开头大写print(zhangsan.title())#首字符大写print(zhangsan.capitalize())#全部大写print(zhangsan.upper())#全部小写print(zhangsan.lower())#大小写呼唤print(zhangsan.swapcase())#去空格name8 = ' wangba 'print(name8.strip())print(name8.lstrip())print(name8.rstrip())#替换 nameniao.replace('小','大')#复制namen = 'zhang'namem = namen[:]print(id(namen))print(id(namem))#比较#一个一个的比过去,前面若都相同,长的赢#小写字母大于大写字母#按ASCII大小print('maishu' > 'zhangsan')
Dict
基-建-增-删
#1. 基础 - 键值对 key:value, key必须是immutable的对象s = {'zs':56,'ms':'88','hu':99}s2= {'zs':{'zs':56,'ms':'88','hu':99},'ms':'88','hu':99}#2.创建s = dict([(1,99),(2,88),(3,99)]) #包含成对数据的iterable(可枚举)names = ['sw','sg','rf','gt']scores = [78,85,69,41]s = dict(zip(names,scores)) #使用zip方法生成字典#有key,value没有或者固定可用此方法生成s3 = dict.fromkeys(names,5)#4. 删除del s['sw'] #删除不存在,则抛出KeyErrorprint(s.pop('sg')) #返回val值print(s.popitem()) #随机删除s.clear() #全部清空
改-查-操
#5. 改names = ['sw','sg','rf','gt']scores = [78,85,69,41]s = dict(zip(names,scores)) #使用zip方法生成字典s['sw'] = 88#6. 查print('sw' in s) #查key#使用key访问val,不存在则抛出errorprint(s.get('sw')) # 不存在,则返回noneprint(s.setdefault('www','google.com'))#7. 遍历字典for k in s: print(k,s[k])print(list(s.keys()))print(list(s.values()))print(list(s.items()))# 按key值排序s2 = {k:v for k,v in sorted(s.items())}# Python小技巧#7:如何给字典Dict按照value排序?#9. copy 浅拷贝 复制一份,地址不同,但元素地址相同s4 = s.copy()s = dict(zip(['sw','sg','rf','gt'],[78,85,69,41])) #使用zip方法生成字典s5 = {'ss':33,'sw':99}s.update(s5) #没有则添加,有则覆盖
Tupple
#基建-增删改查抄-切复#基本概念:tuple是一个有序的,不可改变的数据结构 immutablel = [5,3,2] #listt = (5,2,3) #tuple#优点:1.快 2.安全 3.元组可被作为dict的key# python -m timeit '[5,3,7]'# python -m timeit '(5,3,7)'#用tuple的地方:1.参数 2.其他不变的情况#建t1 = (5,3,7)t2 = tuple([1,2,4])t3 = tuple('maishu')# t4 = tuple(5) #iterable 才可被转换t5 = (5,) #(5)创建的为int类型 (5,)创建一个元素的tuple#增删该 -- 不能#a并非元组本身,只是一个指向内容的引用a = (1,3,5)print(id(a))a = (8,3,5)print(id(a))#查print(a[2])#操 - 不能排序,反转# a.sort()#切 - 切片操作同 listb = a[1:3]#复#复制不能写成 c=a c = a[:]
Set
基-建-增-删
#1.基础:不能重复,不分先后,不收容可变的东西 只能加入immutable的内容#可加入自己定义的对象class Person: def __init__(self,name): self.name = namep = Person('wangwu')name = {'zs','ls','zs',p}# print(name)p.name = 'wangww'# print(name)#什么情况下用set#不分先后,不会重复的场合#建:创建score = set()#空大括号创建为字典类型 score = {}#可被枚举(iterable)的对象就可被转换为setscore = set([4,5,6,5])#3. 增score.add('zs')#4. 删# score.remove('zs') #有就移除,没有就报错score.discard('zs') #有就移除,没有不报错# score.clear() #全部删除元素
#5. 改 - 没有顺序,无下标 没有改#6. 查 in ,not inscore = set([4,5,6,5])print(98 in score)print(5 not in score)print(score.pop()) #取出一个#7. 操作:set集合s1 = {1,2,3,4,5}s2 = {3,4,5,6,8,9}#合并s3 = s1 | s2 s4 = s1.union(s2)#交s5 = s1 & s2#差s6 = s1 - s2#异或s7 = s1 ^ s2#8.切片 --无#9.复制class Person: def __init__(self,name): self.name = namep = Person('wangwu')score.add(p)s0 = score.copy()print(s0)#10. frozensetss = frozenset(s0)print(ss)