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 abc

a = [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_name
        self.company_name = company_name
        self.staffs = staffs

    def __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 True
        else:
            return False

staffs = ["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. 列表推导式、生成器表达式、字典推导式。

原文地址:https://www.cnblogs.com/noah0532/p/10988997.html

时间: 2024-10-03 22:29:35

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

Python说文解字_杂谈08

1. Python变量到底是什么? Python和Java中的变量本质不一样,python的变量实质是一个指针 int str,便利贴 a = 1 # 1. a贴在1上面 # 2. 它的过程是先生成对象,然后贴便利贴. # 3. is 是指的标签贴是否一样. a = 1 b = 1 这个是一样,用的是小整数的内部inter机制的内部优化. == 用的是__eq__这个魔法函数. # 4. 常用的用法是isinstance或者type() is,这两种是通用的.type实际上是指向了这个对象的.

Python说文解字_杂谈05

1. isinstance和type: is和==符号,is指的是内存地址,是不是一个对象,ID知否相同 集成链 class A: pass class B(A): pass b = B() print(isinstance(b,B)) print(isinstance(b,A)) print(type(b) is B) print(id(type(b)),id(B)) # 2943616512536 2943616512536 2. 类变量和对象变量: 类中的self == 实例,其实就等于a

Python说文解字_继承过程中的参数集合

1. 先看一段属性继承的代码: class User: def __init__(self,name,age): self.name = name self.age = age class User1(User): def __init__(self,name,age,height,weight): self.height = height self.weight = weight # 此处像继承父类的name 和 age super().__init__(name, age) user1 =

Python说文解字_父类的继承

1. 第一个问题: 我们知道类是可以继承其他类的,在继承的过程中我们不光可以继承父类的方法,还可继承父类的属性,另外还可以在父类的基础上添加自己的东西. 2. 第二个问题: 我们继承父类属性和方法的时候无需再把父类的属性和方法再写一般.通常用的方法是:父类名.方法/属性,另外还有一种方式就是super().的方法.但其实这两种方式是有一些不同的. 首先举例第一种方式:父类名.方法/属性. 代码: class BaseClass: num_Base_calls = 0 def call_me(se

Python说文解字_Python之多任务_01

Python 之 多任务: Python之多任务是现在多任务编程运用Python语言为载体的一种体现.其中涵盖:进程.线程.并发等方面的内容,以及包括近些年在大数据运算.人工智能领域运用强大的GPU运算能力实现的各种算法.属于Python语言中比较高级的应用形式.文章采取问答的形式对知识点和相关应用的模式进行详解,看似像意识流形态的文章,其内容也是遵循循序渐进,力求全面和精细. 问:什么是多任务? 答:百度定义:“当多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.

嘻嘻哈哈说文解字(讲)

讲的左边是言,右边是井,我想,老祖宗造这个字的意思应该是:话是应该说,但不能说多,不能井边说,言空了就掉井里了(所谓言虚容易掉到井里面).但奈何我们的记忆总不好,只记住了左边的言,这不,你看我们天天都在讲道德,讲道理,讲公德,讲廉洁,讲大公无私....... 上层一边讲一边注水,中层一边讲一边捞钱,下层,边讲边能搞点啥算点啥. 精英一边讲爱国一边移民,大众一边讲爱国一边拆墙脚 ...... 我说这些绝不是说我们没有素质,没有道德,没有理想的.我们都是好人,确确实实的正派好人,这一切主要坏就坏在这

说文解字

1."五色土"中中央之土是什么颜色? 黄色 2."床前明月光"的"床"类似于今天的哪种家具?   茶几 3.小篆"思"字上半部分念什么?xìn 4.<千字文>集的哪位书法家的字?王羲之 5.<千字文>的作者是谁?周兴嗣 6.以下书籍中,哪些属于蒙学读物"三百千千"?<千字文><百家姓> 7.<千字文>撰成于梁代吗?√ 8.据顾炎武<日知录&g

说文解字----矩阵分析(二)特征值特征向量 奇异值分解(SVD)

特征值,奇异值,相关分解是矩阵分析中一个非常重要的概念,我再网上找了些资料,很多人已经对此分析的非常纯熟,为了尊重原创作者,首先贴几个链接,大家欣赏下: 外文链接:http://www.ams.org/samplings/feature-column/fcarc-svd 翻译文章:http://blog.csdn.net/dinosoft/article/details/37884597 数学之美与SVDhttp://blog.chinaunix.net/uid-24517893-id-3261

说文解字——傅里叶变换、拉普拉斯变换、Z变换 (上)

在开始了解这些变换之前,简单复习一下级数的概念: 级数的概念之所以重要,是因为我们现实生活中经常遇到一些不规则的函数,为了方便我们的研究,我们希望能有一种方法来用简单的多项式或者多个函数来近似表示这个函数,这就是我们研究级数的原因:任意一个函数都能用多项式逼近: 假定我们有一个函数f(x),他的曲线是不规则的,我们很难去探索这种曲线的性质,但是如果我们把这种曲线展开成f(x)=f(x0)+f′(x0)(x?x0)+.........,展开式中的函数式我们熟悉的,这样会更便于我们的分析.如果这个例