1.迭代器:通过iter()方法获得了list的迭代对象,然后就可以通过next()方法来访问list中的元素了,当容器中没有可访问元素时,会抛出StopIteration异常终止迭代器

data = [1,2,3,4,5]
itr = iter(data)
print(itr.__next__())

2.自定义迭代器:需要实现__iter__,__next__方法

class CustomRange:
def _init__(self, length):
self.inx = 0
self.length = length
def __iter__(self):
return self
def __next__(self):
if self.inx < self.length:
val = self.idx
self.idx += 2
return val
else:
raise StopIteration if __name__ == "__main__":
cr = CustomRange(20)
print(next(cr))
print(next(cr))

3.生成器,yield

4.生成器与迭代器的区别:

> 通过实现迭代器协议对应的__iter__()和__next__()方法,可以自定义迭代器。对于可迭代对象,for语句可以通过iter()方法获取迭代器,并且通过next方法获取容器的下一个元素

> 生成器是一种特殊的迭代器,内部支持了生成器协议,不需要明确定义__iter__()和__next__()方法

> 生成器通过生成器函数产生,生成器函数可以通过常规的def来定义,但是不用return返回,而是用yield一次返回一个结果

5.列表的api

# append,在后方插入一个元素
# insert(index, obj),插入一个元素
# pop(index),默认移除最后一个元素
# remove(obj),移除第一个匹配的元素,一次删除一个
# index(obj),找到第一个匹配到的元素的索引,没有则抛异常
# count(obj),统计匹配到的元素的次数
# extend(seq),在列表末尾追加序列中的元素
# reverse(),列表反转
# sort([Func]),排序,根据ASCII码从大到小进行排
ll = [(1,5,4),(1,2,3,6,3),(5,1,4,3)]
# 按照每个元素的长度大小进行排序
ll.sort(key=lambda x: len(x), reverse=True)

6.复制

# 引用复制
a = [1,2,3]
b = a
# 非引用复制
a = [1,2,3]
b = a[:]
# copy,deepcopy
a = [1,2,['a', 'b']]
b = a #将a的引用给b,无论a如何变化,b都将保持跟随,因为a,b指向的是同一个
c = copy.copy(a) # 浅拷贝,只拷贝父对象,不会拷贝父对象中的子对象,对子对象拷贝的仍然是子对象的引用。即:a.append(6),c不会变化,如果a[2].append("c"),c会变化。c中的子对象会跟随a中的子对象进行变化。
d = copy.deepcopy(a) # 深拷贝,与a完全没有任何瓜葛了

7.列表推导

ret = [ i for i in [1,2,3] if i >2]

8.枚举

for inx, value in enumerate([11,22,33]):
print inx, value

9.使用list实现一个栈

# 使用list实现栈
# coding:utf-8 class Stack:     """
    栈
    """
    _arr = []
    capcity = 0
    size = 0
    def __init__(self, capcity=100):
        self.capcity = capcity     def push(self, element):
        if self.is_full:
            raise Exception("The Stack is FULL")
        self._arr.append(element)
        self.size += 1     def pop(self):
        if not self.is_empty:
            del self._arr[self.size - 1]
            self.size -= 1
        else:
            raise Exception("The Stack is EMPTY")     def is_empty(self):
        if self.size == 0:
            return True
        return False     @property
    def foo(self):
        return self._foo     @property
    def is_full(self):
        if self.size >= self.capcity:
            return True
        return False     def get_stack(self):
        if not self.is_empty:
            return self._arr[self.size - 1]
        raise Exception("The stack is EMPTY")     def __str__(self):
        msg = ["Stack: "]
        if self.is_empty:
            return "Stack is EMPTY!"
        for arr in self._arr:
            msg.append(str(arr) + " ")
        return "".join(msg)

10.字典排序

d = {3:3,8:-9,1:1,0:0}
s = sorted(d.items(), key=lambda x:x[1], reverse=False)

> dict.fromkeys(seq)

> dict.fromkeys(seq, 0)

> d.get("1", "key not found") #防治抛出异常

> d.update({111:111}),如果有这个key,就更新value,没有则添加到d中

9

 

python_4的更多相关文章

  1. [Python_4] Python 面向对象(OOP)

    0. 说明 Python 面向对象(OOP) 笔记.迭代磁盘文件.析构函数.内置方法.多重继承.异常处理 参考 Python面向对象 1. 面向对象 # -*-coding:utf-8-*- &quo ...

  2. python_4程序设计基础

    1注释 2变量和常量 3命名 4表达式 5赋值语句

  3. python_函数嵌套(4)

    第1章 名称空间 1.1 定义 1.2 变量运行流程 1.3 临时名称空间 1.4 python三种名称空间 第2章 作用域 2.1 作用域分类 2.2 加载顺序 2.3 取值顺序 函数嵌套 2.4 ...

随机推荐

  1. c# 异步和同步 多线程

    在执行较为耗时的处理时,很容易出现用户界面“卡顿”现象,用异步编程模型,将耗时处理的代码放到另一个线程上执行,不会阻止用户界面线程的继续执行,应用程序 就不再出现“卡顿”现象. 本例子提供同步加载和异 ...

  2. Day 7:TreeSet

    补充上一日:HashCode方法默认返回的是内存地址,String类已经重写了对象的HashCode方法 方法细节:取出数组中的值或字符串的值按照规定计算返回一个值,如果两个字符串内容一致就会返回相同 ...

  3. part11 Vue项目接口联调//真机测试

    何为项目接口联调? 前端代码编译好了  后端接口写好了 我们就需要去掉前端模拟数据干掉 用后端提供的数据.进行前后端的一个调试 如何联调? config目录下面 index.js 文件 dev 中pr ...

  4. VUE.js入门学习(2)-基础精讲

    1.VUE 实例 - 一个项目是有很多的vue实例拼装的.每一个组建就是vue的实例. var vm = new Vue() 2.VUE 实例生命周期钩子 生命周期函数:VUE实例在某一个时间点会自动 ...

  5. 了解redis

    redis:非关系型数据库,基于内存高性能,key-value存储,一般用作缓存,开源的使用ANSI C语言编写,遵守BSD协议,支持网络,可基于内存亦可持久化的日志型.Key-Value数据库,并提 ...

  6. 数组 bash shell

    http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html #!/bin/bash # 脚本检测到离线主机会发送邮件通知,可一直运行. ...

  7. 微服务之docker(一)

    一.docker介绍及使用 1.docker简介 (1)Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windo ...

  8. 干货 | 把Flutter扩展到微信小程序端的探索

    Google Flutter是一个非常优秀的跨端框架,不仅可以运行在Android. iOS平台,而且可以支持Web和桌面应用.在国内小程序是非常重要的技术平台,我们也一直思考能否把Flutter扩展 ...

  9. AI 领域与概述

    概述 数据分析行业主要的职业发展. 业务:业务分析师.数据产品经理.产品总监 技术:算法师.架构师.研发经理.研发总监 美工:BI工程师 人工智能,是数据分析的子集.人工智能主要包括 语音识别 自然语 ...

  10. Django模型基础(三)——关系表的数据操作

    模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...