1. 序列类型的分类:

  容器类型:list、tuple,deque

  扁平序列:str、bytes、bytearray、array.array

  可变序列:list、dequte、bytearray、array

  不可变序列:str、tuple、bytes

2. 序列的abc继承关系:

  魔法函数构成了协议

3.序列的+ +=和extend的区别:

  1. my_list = []
  2. my_list.append()
  3. my_list.append("a")
  4.  
  5. from collections import abc
  6.  
  7. a = [,]
  8. # a = list()
  9. c = a + [,]
  10. # c = a + (,) # 抛异常
  11. print(c)
  12.  
  13. # 就地加
  14. a += [,]
  15. a += (,) # 可以为任意的序列类型
  16. a.extend((,))
  17. # def __iadd__(self, values):
  18. # self.extend(values)
  19. # return self
  20. a.append((,,))
  21. print(a)

  记住:我们知道类函数的实现是通过魔法函数来实现的。其中+号表示的是同类项的相加。

  记住:+=和extend是一样的,因此+=是通过__iadd__来实现extend的。

  记住:append表示添加的是元素位置。

  记住:不能用变量名去接收这些方法,因为没有返回值(aa = a.extend是错误的)

4. 实现可切片的对象:

  1. # 模式[start:end:step]
  2. r"""
  3. 其中,第一个数字start表示切片开始位置,默认是0
  4. 第二个数字end表示切片截止(但不包含)位置(默认为列表长度】
  5. 第三个数字step表示切片的步长(默认为1)
  6. 当start为0时可以省略,当end为列表长度时可以省略。
  7. 当start为1时可以生路,并且省略步长时可以同时省略最后一个冒号。
  8. 另外,当step为负整数时,表示反向切片,这时start应该比end的值要大才行。
  9. """
  10. aList = [,,,,,,,,,]
  11. # 取值的操作
  12. print(aList[::]) #返回包含原里列表中所有元素的新列表
  13. print(aList[::-]) #返回包含原列表中所有元素的逆序列表
  14. print(aList[::]) # 隔一个取一个,获取偶数位置的元素
  15. print(aList[::]) #隔一个取一个,获取奇数位置的元素
  16. print(aList[:]) # 指定切片的开始和结束位置
  17. print(aList[:]) # 切片结束位置大于列表长度时,从里诶包尾部截断
  18. print(aList[:]) # 切片开始位置大于列表长度时,返回空列表
  19.  
  20. # 赋值的操作
  21. aList[len(aList):] = []
  22. print(aList) # 在列表尾部增加元素
  23. aList[:] = [,]
  24. print(aList) # 在列表头部插入元素
  25. aList[:] = []
  26. print(aList) # 在列表中间位置插入元素
  27. aList[:] = [,]
  28. print(aList) #替换元素列表元素,等号两边的里诶包长度相同
  29. aList[:] = [,,]
  30. print(aList) # 等号两边的列表长度也可以不相等
  31. aList[::] = [] * # 将元素赋值三份
  32. print(aList) # 隔一个修改一个
  33. aList[::] = ['a','b','c'] # 隔一个修改一个
  34. print(aList)
  35. # aList[::] = [,] # 左侧切片不连续,等号两边列表长度必须相等
  36. aList[:] = [] #删除列表中前3个元素
  37. del aList[:] # 切片元素连续
  38. del aList[::] # 切片元素不连续,隔一个删一个。
  39. print(aList)
  1. import numbers
  2. class Group:
  3. # 支持切片操作
  4. def __init__(self,group_name,company_name,staffs):
  5. self.group_name = group_name
  6. self.company_name = company_name
  7. self.staffs = staffs
  8.  
  9. def __reversed__(self):
  10. self.staffs.reverse()
  11.  
  12. def __getitem__(self, item):
  13. cls = type(self)
  14. if isinstance(item,slice):
  15. return cls(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])
  16. elif isinstance(item,numbers.Integral):
  17. return cls(group_name=self.group_name,company_name=self.company_name,staffs=[self.staffs[item]])
  18.  
  19. def __len__(self):
  20. return len(self.staffs)
  21.  
  22. def __iter__(self):
  23. return iter(self.staffs)
  24.  
  25. def __contains__(self, item):
  26. if item in self.staffs:
  27. return True
  28. else:
  29. return False
  30.  
  31. staffs = ["bobby1","imooc","bobby2","bobby3"]
  32. group = Group(company_name="imooc",group_name="user",staffs=staffs)
  33. sub_group = group[:]
  34. print(group.staffs)
  35. # sub_group1 = group[]
  36. # print(group.staffs)
  37. # reversed(group)
  38. # for user in group:
  39. # print(user)

  记住:这是一个比较多的用魔法函数实现切片操作。

  记住:难理解的是cls = type(self),返回值:<class '__main__.Group'>,这是拿到类的对象 ,其实可以改写成下面方式

  1. def __getitem__(self, item):
  2. # cls = type(self)
  3. # print(type(self))
  4. if isinstance(item,slice):
  5. return Group(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])
  6. elif isinstance(item,numbers.Integral):
  7. return Group(group_name=self.group_name,company_name=self.company_name,staffs=[self.staffs[item]])

  记住:但是这里为什么要用type返回类对象呢?这是一种相对方式,为的是如果更改类名可以不用修改内部的代码。

5. bisect二分迭代类型操作:

  1. import bisect
  2. from collections import deque
  3.  
  4. # 用来处理已排序的序列,始终用来维持已排序的序列,升序。
  5. # 二分查找
  6. inter_list = []
  7. bisect.insort(inter_list,)
  8. bisect.insort(inter_list,)
  9. bisect.insort(inter_list,)
  10. bisect.insort(inter_list,)
  11. bisect.insort(inter_list,)
  12.  
  13. print(inter_list)
  14. # 总结:
  15. # bisect.bisect(data,)
  16. # 作用,查找该数值将会插入的位置并返回,而不会插入,返回是会在那个数字之后插入
  17. # 表示:num > .... 插入
  18. a1 = bisect.bisect(inter_list,)
  19. print(a1)
  20.  
  21. # bisect_left 和 bisect_right 函数
  22. # 该函数用入处理将会插入重复数值的情况,返回将会插入的位置
  23. # 第一:从左边看num>...插入位置
  24. # 第二:从右边看 ... < num 出入位置。
  25. a2 = bisect.bisect_left(inter_list,)
  26. print(a2)
  27. a3 = bisect.bisect_right(inter_list,)
  28. print(a3)
  29.  
  30. # insort 函数 insort_left 和 insort_right
  31. bisect.insort(inter_list,)
  32. print(inter_list)

7.数组:

  1. # array, deque
  2. # 数组:存储连续的内存空间,效率非常高的。
  3. import array
  4. # array 和list的一个重要区别,array只能存放指定的数据类型。
  5. # array的性能比list高。
  6.  
  7. my_array = array.array("i")
  8. my_array.append()
  9. my_array.append("abc")
  10. print(my_array)

  记住:我们是会用 列表,什么时候用数组

8. 列表推导式、生成器表达式、字典推导式、集合推导式。

  1. # 列表生成式(列表推导式)
  2. # . 提取1-20之间的奇数
  3. odd_list = []
  4. for i in range():
  5. if i % ==:
  6. odd_list.append(i)
  7.  
  8. print(odd_list)
  9.  
  10. # 列表生成式
  11. odd_list = [i for i in range() if i % == ]
  12.  
  13. # .逻辑复杂的情况
  14. def handle_item(item):
  15. return item * item
  16.  
  17. odd_list1 = [handle_item(i) for i in range() if i % == ]
  18.  
  19. # 列表生成式性能高于列表操作。

  记住:列表生成式不能太复杂了。要不就放弃了可读性。另外列表生成式的操作高于列表操作。

  1. # 生成器表达式:
  2. odd_list = (i for i in range() if i % == )
  3. print(type(odd_list))
  4. # <class 'generator'>
  5. for item in odd_list:
  6. print(item)

  记住:生成器通过for循环打印出来。

  1. odd_gen = (i for i in range() if i % == )
  2.  
  3. odd_list = list(odd_gen)
  4. print(odd_list)

  记住:生成器可以转回成list再打印出来也是可以的。

  1. # 字典推导式
  2. my_dict = {"bobby1":,"bobby2":,"imooc":}
  3. reversed_dict = {value:Key for Key,value in my_dict.items()}
  4. print(reversed_dict)
  5. # {: 'bobby1', : 'bobby2', : 'imooc'}
  1. # 集合推导式
  2. # my_set = set(my_dict.keys())
  3. my_set = {Key for Key,value in my_dict.items()}
  4. print(my_set)
  5. print(type(my_set))
  6. # <class 'set'>

Python说文解字_杂谈06的更多相关文章

  1. Python说文解字_杂谈05

    1. isinstance和type: is和==符号,is指的是内存地址,是不是一个对象,ID知否相同 集成链 class A: pass class B(A): pass b = B() prin ...

  2. Python说文解字_杂谈09

    1. 元类编程代码分析: import numbers class Field: pass class IntField(Field): # 数据描述符: # 初始化 def __init__(sel ...

  3. Python说文解字_杂谈08

    1. Python变量到底是什么? Python和Java中的变量本质不一样,python的变量实质是一个指针 int str,便利贴 a = 1 # 1. a贴在1上面 # 2. 它的过程是先生成对 ...

  4. Python说文解字_杂谈07

    1. 深入dict from collections.abc import Mapping,MutableMapping # dict 属于mapping类型 a = {} print(isinsta ...

  5. Python说文解字_杂谈01

    1. Python在Ubuntu下面下载Python 2. 安装依赖包 sudo apt-get update sudo apt-get install build-essential python- ...

  6. Python说文解字_杂谈04

    1. 鸭子类型: 当你看到一只鸟走来像鸭子,游泳起来像鸭子,叫起来也像鸭子,他么他就可以叫做鸭子.任何可迭代的对象.一样的方法,可以用可迭代的话,就可以迭代的组合打印.__getitem__可以塞到任 ...

  7. Python说文解字_杂谈03

    1. 我们从前面的知识得到,所有的类都要继承自object这个基类(超类),另外我们知道“继承”可以继承类的属性和方法.我们起始通过type创建类的时候,自然而然的也会从ojbect继承他的一些属性和 ...

  8. Python说文解字_杂谈02

    1. Py中三个中啊哟的概念type.object和class的关系. type生成了int生成了1 type->class->obj type用来生成类对象的 object是最顶层的基类 ...

  9. Python说文解字_详解元类

    1.深入理解一切接对象: 1.1 什么是类和对象? 首先明白元类之前要明白什么叫做类.类是面向对象object oriented programming的重要概念.在面向对象中类和对象是最基本的两个概 ...

随机推荐

  1. POJ 1655:Balancing Act

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10311   Accepted: 4261 De ...

  2. 无法执行 BACKUP LOG,因为当前没有数据库备份,导入数据库备份.bak文件

    右键数据库——>任务——>还原——>数据库 无法执行 BACKUP LOG,因为当前没有数据库备份 结尾日志的问题 还原选择中去掉结尾日志就可以了

  3. 存储器HK1225-7EQ 使用说明书资料

    一. 引脚排列 二. 读取模式 HK1225在WE(写使能)被禁止(high)且CE(片选)被选中(Low)且CE2(片选2)被选中(High)并且OE(读信号)被使能(Low)执行一次读循环.13个 ...

  4. 用 Python监控了另一半的每天都在看的网站,我发现了一个秘密

    ​ 阅读文本大概需要 5 分钟. ! 需求: (1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中 (2)将这个txt文件发送给指定的邮箱地址(你的邮 ...

  5. Spring-IOC(基于注解)

    1.Spring 的 Bean 管理:(注解方式) 1.1 创建 web 项目,引入 Spring 的开发包: 注:在 Spring 的注解的 AOP 中需要引入 spring-aop 的 jar 包 ...

  6. 084-PHP文件引用include

    02.php <?php $color = 'green'; $fruit = 'apple'; ?> 01.php <?php echo "A $color $fruit ...

  7. linux命令,个人的日记本

    查看所有服务 chkconfig --list service httpd status ps -aux | grep svn

  8. Centos7安装rabbitMQ3.6.0

    文章中的erlang和rabbitmq3.6.0 http://pan.baidu.com/s/1c2Nn64w ​ Centos7 系统操作 cd /etc/yum.repos.d/ mv Cent ...

  9. 掌握这几点,轻松搞定Essay Cohesion写作

    Cohesion就是衔接,是留学生Essay写作中中一个很重要的评价标准.很多留学生在平时Essay写作中,主体段已经做到了有观点.有例子,字数也不差,但总是被评价为展开不够.说理不清.不好follo ...

  10. UVA - 1606 Amphiphilic Carbon Molecules(两亲性分子)(扫描法)

    题意:平面上有n(n <= 1000)个点,每个点为白点或者黑点.现在需放置一条隔板,使得隔板一侧的白点数加上另一侧的黑点数总数最大.隔板上的点可以看做是在任意一侧. 分析:枚举每个基准点i,将 ...