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

建-增-删

  1. #建 - [],list(),range()
  2. names_1 = ['zhangsan','lisi','wangwu']
  3. #建2 list()可接受 iterable 可遍历的对象
  4. names_2 = list() #创建一个空列表
  5. names_2 = list(range(5)) #可以接受range
  6. names_2 = list((1,2,3,4,5)) #元组
  7. names_2 = list('maishu')
  8. #增 append,insert,extend,+
  9. names = []
  10. names.append('maishu')
  11. names.append('maiershu')
  12. names.append(3)
  13. names.append((3,5,4))
  14. print(names)
  15. #增2 insert
  16. names.insert(3,886)
  17. #插入下表超过长度,放在长度
  18. #增3
  19. bad_guys = ['麦叔',"小麦"]
  20. # names.append(bad_guys) #作为元素插入
  21. names.extend(bad_guys) #extend方法
  22. # names += bad_guys #等同于extend
  23. print(names)
  24. #删1 del 运算符,不需要括号
  25. #根据下标来删除
  26. #根据内容来删除
  27. # del names[4]
  28. #删2 pop
  29. #1. 默认删掉最后一个
  30. #2. 可以指定下标
  31. #3. 会返回pop值
  32. #4. 下标索引越界,会抛出index 异常
  33. # names.pop(10)
  34. #删3 remove
  35. #1. 只会删除第一个符合条件的数据
  36. #2. 没有符合条件的,则抛出value Error
  37. #3. 若要全部删除,可用if 判断列表中是否有该元素
  38. if'xx' in names:
  39. names(remove('xx'))
  40. print(names)
  41. names.remove('maishu')
  42. print(names)

查-操

  1. #查 : 查询元素[], index(), len()
  2. #查 1: 下表从0开始,也可从-1开始(-1代表最后一个)
  3. #下标越界会出现index error
  4. #查2 由名字查下标
  5. # 1. 如果有多个,查到第一个
  6. # 2. 如果不存在,则抛出value error
  7. print(names.index('maishu'))
  8. #查3
  9. #通过 in ,not in 来判定
  10. if(886 not in names):
  11. names.append(886)
  12. else:
  13. names.index(886)
  14. #查4 len()
  15. print(len(names))
  16. #操:操作 loop,+,*,sort,reverse,max,min
  17. #操1: loop
  18. # for n in names:
  19. # print('hello,',n)
  20. # for index,n in enumerate(names):
  21. # print(f'NO{index} is {n}')
  22. #操2: 基本运算 + * ==
  23. scores = [87,25,69,89]
  24. print(names+scores) #与extend效果相同
  25. print(scores * 3)
  26. #操3:
  27. print(scores)
  28. #会修改原列表
  29. scores.reverse()
  30. print(scores)
  31. scores.sort()
  32. print(scores)
  33. scores.sort(reverse=True)
  34. print(scores)
  35. #创建新的列表
  36. print(sorted(scores))
  37. print(sorted(scores,reverse=True))
  38. #排序进阶
  39. names_scores = [('zhangsan',87),('maishu',100),('lisi',88)]
  40. print(sorted(names_scores))
  41. #字符串的比较,字符串以此比较,按照字符顺序,前面一样大,长的算大
  42. #通过 key 指定排列
  43. print(sorted(names_scores, key=lambda n:n[1]))
  44. #操 4 :
  45. print(max(scores))
  46. print(min(scores))
  47. print(sum(scores))

切-复

  1. #切片操作 start:end:step
  2. a = 'maishu'
  3. #1. 取单个数字
  4. print(a[3])
  5. #2. 取子串 a[start:end]不包括end
  6. print(a[3:7])
  7. #3. start end 取负数
  8. print(a[-3:None])
  9. #4. start 大于 end
  10. print(a[4:3])
  11. #返回空字符串
  12. #5. 空的start或end
  13. print(a[2:])
  14. #6. 可用None代替空的start
  15. print(a[None:3])
  16. #复 : 推导式,comprehension map filter
  17. # print(names)
  18. # names2 = names[:]
  19. nums = list(range(100))
  20. # print(nums)
  21. sq_nums = [n*n for n in nums]
  22. # print(sq_nums)
  23. nums_3 = [n+8 for n in nums if n%3==0]
  24. print(nums_3)
  25. print(list(map(lambda n:n+8, nums)))

String

基 - 建

  1. # 基 1.字符串是一个字符序列(sequence),2.基于utf-8编码 -- 中文不会出现乱码 3. 对应str类
  2. #编码:1.ASCII 256个字符 2. ISO-9995-2 3.ANSI 4.GBK,GB2312 5.UTF-8 包含了已知所有字符
  3. # 字符串为序列
  4. # for n in 'helloworld':
  5. # print(n)
  6. #打印字符串操作方法
  7. # print(dir(str))
  8. #小练习:给一个字符串,找出里边所有o的个数
  9. string = 'helloworld'
  10. num = 0
  11. for n in string:
  12. if n == 'o':
  13. num += 1
  14. # print(num)
  15. #2. 建
  16. #2.1 简单创建
  17. zs = '张三'
  18. ls = "李四"
  19. ww = '''王五
  20. dsf
  21. sf'''
  22. #2.2 转义字符,引号的相互嵌套
  23. zs2 = '张\t三'
  24. ls2 = 'lisi\'s'
  25. ww2 = "wangwu's"
  26. #2.3 构造方法
  27. score = str(48)

增-删改-查

  1. #3 增:字符串是immutable
  2. name = 'zhangsan'
  3. # name[-1] = 'm' 不可修改
  4. # name2 = 'zhangsan' + 'm'
  5. name2 = name[:-1] + 'm'
  6. print(name2)
  7. #字符串被重用
  8. #同一个字符串在内存中只有一个
  9. name3 = name
  10. name4 = 'zhangsan'
  11. print(id(name))
  12. print(id(name3))
  13. print(id(name4))

  1. #删 - 不可能的
  2. #改 - 不可能的
  3. #6查
  4. #6.1 通过下标来访问一个字符
  5. shame = '打工是不可能打工的'
  6. print(shame[5])
  7. #6.2 子串是否存在 - numbership: in,not in
  8. # print('可能' in shame)
  9. # print('可能w' in shame)
  10. print('可能w' not in shame)
  11. # identity : is ,is not
  12. print(type(shame) is str)
  13. #6.3 开头 结尾
  14. print(shame.startswith('打工'))
  15. print(shame.endswith('的'))
  16. #6.4 所在的下标
  17. print(shame.index('可能'))
  18. #找出所有姓张的名字
  19. ls = ['张三','李四','王五','张长利','施耐庵']
  20. for index,name in enumerate(ls):
  21. if name.startswith('张'):
  22. print(f'第{index+1}个名字为:{name}')

  1. # 7 操作
  2. #格式化输出
  3. name = 'zhangsan '
  4. greeting = 'hello,'+name + ',吃了吗'
  5. g2 = 'hello,{name},吃了吗?'
  6. print(g2.format(name=name))
  7. #拆分
  8. # names = '张三,李四,王五,张长利,施耐庵'
  9. # for n in names.split(','):
  10. # print(n)
  11. #合并
  12. h ='hello'
  13. names2 = ['张三','李四','王五','张长利','施耐庵']
  14. print(" - ".join(names2))
  15. # print(h.join(name))
  16. #输出:zhellohhelloahellonhelloghelloshelloahellonhello
  17. #查找:出现次数,RE
  18. nameniao = '我是一只小小小小小鸟'
  19. name.count('小')
  20. #改变大小写
  21. zhangsan = 'zhangsan is a Cool Boy'
  22. #字符开头大写
  23. print(zhangsan.title())
  24. #首字符大写
  25. print(zhangsan.capitalize())
  26. #全部大写
  27. print(zhangsan.upper())
  28. #全部小写
  29. print(zhangsan.lower())
  30. #大小写呼唤
  31. print(zhangsan.swapcase())
  32. #去空格
  33. name8 = ' wangba '
  34. print(name8.strip())
  35. print(name8.lstrip())
  36. print(name8.rstrip())
  37. #替换
  38. nameniao.replace('小','大')
  39. #复制
  40. namen = 'zhang'
  41. namem = namen[:]
  42. print(id(namen))
  43. print(id(namem))
  44. #比较
  45. #一个一个的比过去,前面若都相同,长的赢
  46. #小写字母大于大写字母
  47. #按ASCII大小
  48. print('maishu' > 'zhangsan')

Dict

基-建-增-删

  1. #1. 基础 - 键值对 key:value, key必须是immutable的对象
  2. s = {'zs':56,'ms':'88','hu':99}
  3. s2= {'zs':{'zs':56,'ms':'88','hu':99},'ms':'88','hu':99}
  4. #2.创建
  5. s = dict([(1,99),(2,88),(3,99)]) #包含成对数据的iterable(可枚举)
  6. names = ['sw','sg','rf','gt']
  7. scores = [78,85,69,41]
  8. s = dict(zip(names,scores)) #使用zip方法生成字典
  9. #有key,value没有或者固定可用此方法生成
  10. s3 = dict.fromkeys(names,5)
  11. #4. 删除
  12. del s['sw'] #删除不存在,则抛出KeyError
  13. print(s.pop('sg')) #返回val值
  14. print(s.popitem()) #随机删除
  15. s.clear() #全部清空

改-查-操

  1. #5. 改
  2. names = ['sw','sg','rf','gt']
  3. scores = [78,85,69,41]
  4. s = dict(zip(names,scores)) #使用zip方法生成字典
  5. s['sw'] = 88
  6. #6. 查
  7. print('sw' in s) #查key
  8. #使用key访问val,不存在则抛出error
  9. print(s.get('sw')) # 不存在,则返回none
  10. print(s.setdefault('www','google.com'))
  11. #7. 遍历字典
  12. for k in s:
  13. print(k,s[k])
  14. print(list(s.keys()))
  15. print(list(s.values()))
  16. print(list(s.items()))
  17. # 按key值排序
  18. s2 = {k:v for k,v in sorted(s.items())}
  19. # Python小技巧#7:如何给字典Dict按照value排序?
  20. #9. copy 浅拷贝 复制一份,地址不同,但元素地址相同
  21. s4 = s.copy()
  22. s = dict(zip(['sw','sg','rf','gt'],[78,85,69,41])) #使用zip方法生成字典
  23. s5 = {'ss':33,'sw':99}
  24. s.update(s5) #没有则添加,有则覆盖

Tupple

  1. #基建-增删改查抄-切复
  2. #基本概念:tuple是一个有序的,不可改变的数据结构 immutable
  3. l = [5,3,2] #list
  4. t = (5,2,3) #tuple
  5. #优点:1.快 2.安全 3.元组可被作为dict的key
  6. # python -m timeit '[5,3,7]'
  7. # python -m timeit '(5,3,7)'
  8. #用tuple的地方:1.参数 2.其他不变的情况
  9. #建
  10. t1 = (5,3,7)
  11. t2 = tuple([1,2,4])
  12. t3 = tuple('maishu')
  13. # t4 = tuple(5) #iterable 才可被转换
  14. t5 = (5,) #(5)创建的为int类型 (5,)创建一个元素的tuple
  15. #增删该 -- 不能
  16. #a并非元组本身,只是一个指向内容的引用
  17. a = (1,3,5)
  18. print(id(a))
  19. a = (8,3,5)
  20. print(id(a))
  21. #查
  22. print(a[2])
  23. #操 - 不能排序,反转
  24. # a.sort()
  25. #切 - 切片操作同 list
  26. b = a[1:3]
  27. #复
  28. #复制不能写成 c=a
  29. c = a[:]

Set

基-建-增-删

  1. #1.基础:不能重复,不分先后,不收容可变的东西 只能加入immutable的内容
  2. #可加入自己定义的对象
  3. class Person:
  4. def __init__(self,name):
  5. self.name = name
  6. p = Person('wangwu')
  7. name = {'zs','ls','zs',p}
  8. # print(name)
  9. p.name = 'wangww'
  10. # print(name)
  11. #什么情况下用set
  12. #不分先后,不会重复的场合
  13. #建:创建
  14. score = set()
  15. #空大括号创建为字典类型 score = {}
  16. #可被枚举(iterable)的对象就可被转换为set
  17. score = set([4,5,6,5])
  18. #3. 增
  19. score.add('zs')
  20. #4. 删
  21. # score.remove('zs') #有就移除,没有就报错
  22. score.discard('zs') #有就移除,没有不报错
  23. # score.clear() #全部删除元素
  1. #5. 改 - 没有顺序,无下标 没有改
  2. #6. 查 in ,not in
  3. score = set([4,5,6,5])
  4. print(98 in score)
  5. print(5 not in score)
  6. print(score.pop()) #取出一个
  7. #7. 操作:set集合
  8. s1 = {1,2,3,4,5}
  9. s2 = {3,4,5,6,8,9}
  10. #合并
  11. s3 = s1 | s2
  12. s4 = s1.union(s2)
  13. #交
  14. s5 = s1 & s2
  15. #差
  16. s6 = s1 - s2
  17. #异或
  18. s7 = s1 ^ s2
  19. #8.切片 --无
  20. #9.复制
  21. class Person:
  22. def __init__(self,name):
  23. self.name = name
  24. p = Person('wangwu')
  25. score.add(p)
  26. s0 = score.copy()
  27. print(s0)
  28. #10. frozenset
  29. ss = frozenset(s0)
  30. print(ss)