Python说文解字_杂谈06
1. 序列类型的分类:
容器类型:list、tuple,deque
扁平序列:str、bytes、bytearray、array.array
可变序列:list、dequte、bytearray、array
不可变序列:str、tuple、bytes
2. 序列的abc继承关系:
魔法函数构成了协议
3.序列的+ +=和extend的区别:
my_list = [] my_list.append(1) my_list.append("a")from collections import abca = [1,2] # a = list() c = a + [3,4] # c = a + (3,4) # 抛异常 print(c)# 就地加 a += [3,4] a += (3,4) # 可以为任意的序列类型 a.extend((3,4)) # def __iadd__(self, values): # self.extend(values) # return self a.append((1,2,4)) print(a)
记住:我们知道类函数的实现是通过魔法函数来实现的。其中+号表示的是同类项的相加。
记住:+=和extend是一样的,因此+=是通过__iadd__来实现extend的。
记住:append表示添加的是元素位置。
记住:不能用变量名去接收这些方法,因为没有返回值(aa = a.extend是错误的)
4. 实现可切片的对象:
# 模式[start:end:step] r""" 其中,第一个数字start表示切片开始位置,默认是0第二个数字end表示切片截止(但不包含)位置(默认为列表长度】第三个数字step表示切片的步长(默认为1)当start为0时可以省略,当end为列表长度时可以省略。当start为1时可以生路,并且省略步长时可以同时省略最后一个冒号。另外,当step为负整数时,表示反向切片,这时start应该比end的值要大才行。 """ aList = [3,4,5,6,7,9,11,13,15,17] # 取值的操作 print(aList[::]) #返回包含原里列表中所有元素的新列表 print(aList[::-1]) #返回包含原列表中所有元素的逆序列表 print(aList[::2]) # 隔一个取一个,获取偶数位置的元素 print(aList[1::2]) #隔一个取一个,获取奇数位置的元素 print(aList[3:6]) # 指定切片的开始和结束位置 print(aList[0:100]) # 切片结束位置大于列表长度时,从里诶包尾部截断 print(aList[100:]) # 切片开始位置大于列表长度时,返回空列表# 赋值的操作 aList[len(aList):] = [9] print(aList) # 在列表尾部增加元素 aList[:0] = [1,2] print(aList) # 在列表头部插入元素 aList[3:3] = [4] print(aList) # 在列表中间位置插入元素 aList[:3] = [1,2] print(aList) #替换元素列表元素,等号两边的里诶包长度相同 aList[3:] = [4,5,6] print(aList) # 等号两边的列表长度也可以不相等 aList[::2] = [0] * 3 # 将元素赋值三份 print(aList) # 隔一个修改一个 aList[::2] = ['a','b','c'] # 隔一个修改一个 print(aList) # aList[::2] = [1,2] # 左侧切片不连续,等号两边列表长度必须相等 aList[:3] = [] #删除列表中前3个元素 del aList[:3] # 切片元素连续 del aList[::3] # 切片元素不连续,隔一个删一个。 print(aList)
import numbers class Group:# 支持切片操作def __init__(self,group_name,company_name,staffs):self.group_name = group_nameself.company_name = company_nameself.staffs = staffsdef __reversed__(self):self.staffs.reverse()def __getitem__(self, item):cls = type(self)if isinstance(item,slice):return cls(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])elif isinstance(item,numbers.Integral):return cls(group_name=self.group_name,company_name=self.company_name,staffs=[self.staffs[item]])def __len__(self):return len(self.staffs)def __iter__(self):return iter(self.staffs)def __contains__(self, item):if item in self.staffs:return Trueelse:return Falsestaffs = ["bobby1","imooc","bobby2","bobby3"] group = Group(company_name="imooc",group_name="user",staffs=staffs) sub_group = group[:2] print(group.staffs) # sub_group1 = group[0] # print(group.staffs) # reversed(group) # for user in group: # print(user)
记住:这是一个比较多的用魔法函数实现切片操作。
记住:难理解的是cls = type(self),返回值:<class '__main__.Group'>,这是拿到类的对象 ,其实可以改写成下面方式
def __getitem__(self, item):# cls = type(self)# print(type(self))if isinstance(item,slice):return Group(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])elif isinstance(item,numbers.Integral):return Group(group_name=self.group_name,company_name=self.company_name,staffs=[self.staffs[item]])
记住:但是这里为什么要用type返回类对象呢?这是一种相对方式,为的是如果更改类名可以不用修改内部的代码。
5. bisect二分迭代类型操作:
import bisect from collections import deque# 用来处理已排序的序列,始终用来维持已排序的序列,升序。 # 二分查找 inter_list = [] bisect.insort(inter_list,3) bisect.insort(inter_list,2) bisect.insort(inter_list,5) bisect.insort(inter_list,1) bisect.insort(inter_list,6)print(inter_list) # 总结: # bisect.bisect(data,1) # 作用,查找该数值将会插入的位置并返回,而不会插入,返回是会在那个数字之后插入 # 表示:num > .... 插入 a1 = bisect.bisect(inter_list,4) print(a1)# bisect_left 和 bisect_right 函数 # 该函数用入处理将会插入重复数值的情况,返回将会插入的位置 # 第一:从左边看num>...插入位置 # 第二:从右边看 ... < num 出入位置。 a2 = bisect.bisect_left(inter_list,2) print(a2) a3 = bisect.bisect_right(inter_list,2) print(a3)# insort 函数 insort_left 和 insort_right bisect.insort(inter_list,2) print(inter_list)
7.数组:
# array, deque # 数组:存储连续的内存空间,效率非常高的。 import array # array 和list的一个重要区别,array只能存放指定的数据类型。 # array的性能比list高。my_array = array.array("i") my_array.append(1) my_array.append("abc") print(my_array)
记住:我们是会用 列表,什么时候用数组
8. 列表推导式、生成器表达式、字典推导式、集合推导式。
# 列表生成式(列表推导式) # 1. 提取1-20之间的奇数 odd_list = [] for i in range(21):if i %2 ==1:odd_list.append(i)print(odd_list)# 列表生成式 odd_list = [i for i in range(21) if i %2 == 1 ]# 2.逻辑复杂的情况 def handle_item(item):return item * itemodd_list1 = [handle_item(i) for i in range(21) if i %2 == 1 ]# 列表生成式性能高于列表操作。
记住:列表生成式不能太复杂了。要不就放弃了可读性。另外列表生成式的操作高于列表操作。
# 生成器表达式: odd_list = (i for i in range(21) if i %2 == 1 ) print(type(odd_list)) # <class 'generator'> for item in odd_list:print(item)
记住:生成器通过for循环打印出来。
odd_gen = (i for i in range(21) if i %2 == 1 )odd_list = list(odd_gen) print(odd_list)
记住:生成器可以转回成list再打印出来也是可以的。
# 字典推导式 my_dict = {"bobby1":22,"bobby2":23,"imooc":5} reversed_dict = {value:Key for Key,value in my_dict.items()} print(reversed_dict) # {22: 'bobby1', 23: 'bobby2', 5: 'imooc'}
# 集合推导式 # my_set = set(my_dict.keys()) my_set = {Key for Key,value in my_dict.items()} print(my_set) print(type(my_set)) # <class 'set'>
转载于:https://www.cnblogs.com/noah0532/p/10988997.html
Python说文解字_杂谈06相关推荐
- 全字库说文解字字体_整理了10款免费商用中文字体,超好用
文章来源:logo设计视觉(ID:logoshijue) 字体不能随便用!大家应该经常有听到字体侵权索赔上几十上百万事吧!作为小小的设计师遇上了就倒霉啦!所以,我们要有足够版权意识,没事囤点免费可商用 ...
- 全字库说文解字字体_【180期】可商用字体大全,无版权纠纷!
大家好我是万能的向前 今天向前为你精选了 可商用字体最全收集免费,无版权纠纷 每个设计高手都离不开百变的字体,但是,如果审美不到位字库不全,找不到合适的字体,领导.客户就相不中!那就有可能被降薪,糟心 ...
- java 词根_英语词根与单词的说文解字---词根示例1、第10页 st(at)
英语词根与单词的说文解字---词根示例1.第10页 st(at) 一.总结 一句话总结: 站 state,establish,constitution 英 [ɪ'stæblɪʃ; e-] 美 [ɪˈ ...
- 说文解字 —— 拆字
1. 说文解字 美: 羊大为美:所以有肥美嘛 2. 世说新语 皇: 王上加白: 工人: 工人就是天: 3. 复杂词语 三星期,六点钟:三星期为二十一,六点钟为酉时的酉:加在一起就是醋: 4. 数字 7 ...
- 嘻嘻哈哈说文解字(讲)
讲的左边是言,右边是井,我想,老祖宗造这个字的意思应该是:话是应该说,但不能说多,不能井边说,言空了就掉井里了(所谓言虚容易掉到井里面).但奈何我们的记忆总不好,只记住了左边的言,这不,你看我们天天都 ...
- 读书笔记(四)---读《说文解字》的快乐点滴
想读这本书的缘由在于,我经常背英语单词:为了更牢靠的记住英语单词,使用了某些例如按词根记住单词的技巧,突然想到自己对汉字也有很多是不认识的,学习一门外语花了这么大力气,为何学习母语反而不下工夫呢?于是 ...
- 曲刚英语说文解字全套下载
买了曲刚英语说文解字全套已经学完了,因为都是电子录像,所以想转让一下,有兴趣的可以联系我,已经解决其他机器上无法播放的问题? 联系方式q.q:375501819 下载地址可以联系我~
- 快步英语说文解字颠覆中国传统英语教学模式
原文出处 http://tinyurl.com/43637676 快步7号说文解字里面内容到底教了那些呢 中国近百年来沉闷压抑僵死的英语教学困境终于迎来颠覆性.震撼性突破,横空出世的曲刚英语语音大表. ...
- 《说文解字》与程序设计
说文解字 领券网 https://www.cps3.cn/ <说文解字>,简称<说文>,是由东汉经学家.文字学家许慎编著的语文工具书著作.<说文解字>是中国最早的系 ...
最新文章
- python 设计模式 观察者_python设计模式之观察者模式
- IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表
- pb65 xp 安装无反应_长春优质AFB型耐腐蚀泵安装
- ibatis mysql 自增_mybatis自增主键
- [html] 如果要开发一个在超级大屏上显示的可视化页面,你首先要考虑什么?
- 样本不均衡、长尾分布问题的方法整理(文献+代码)
- 樊登读书分享ppt_樊登读书精华分享-《分手后,成为更好的自己》
- 【正则表达式】正则表达式匹配SQL中的函数名
- mfc远程连接mysql数据库连接_MFC连接mysql数据库(十分钟搞定)
- linux命令地址,[命令] Linux IP 命令 IP(管理地址)
- 2048游戏简单实现
- 考研一战失利反思与二战的规划
- 【keil/MDK5】编译生成bin文件和汇编文件
- ACD是计算机的应用之一,ACDSee
- Android Studio 2.2 正式稳定版已发布,先睹为快!
- linux使用ftp传递文件,在linux下使用FTP命令传输文件
- Oracle创建用户后无法登录,报错ORA-01045: user lacks CREATE SESSION privilege
- mpu9250摘抄笔记及心得
- 麦子学院IT资源,web前端,UI设计,Java全套,IOS,android,产品经理,pyhton,网络安全,运维
- 手机/笔记本电脑看电视直播