一、切片

list、tuple常常截取某一段元素,截取某一段元素的操作很常用 ,所以python提供了切片功能。

L=['a','b','c','d','e','f']
#取索引0,到索引3的元素,不包括索引3
print(L[0:3])
#开始索引为0可以省略
print(L[:3])
#下标1到3
print(L[1:3])
#取最后一个元素
print(L[-1])
#取倒数后两个元素
print(L[-2:])
#取前四个数,每两个取一个
print(L[:4:2])
#所有数,每两个取一个
print(L[::2])

二、迭代

除了list、tuple可以迭代外,python中的dict类型变量也可以迭代。

dictor = {'name':'Jul','age':17,'femail':1}
#迭代key
for key in dictor:
print(key)
#迭代value
for value in dictor.values():
print(value)
#迭代key,value
for k,v in dictor.items():
print(k,v)

可以将list变为索引元素对的形式

for x,y in [(1,2),(3,4),(5,6)]:
print(x,y)
#变为索引元素对
for i,value in enumerate(['A','B','C']):
print(i,value)

同时可以判断一个对象是否可以迭代

for x,y in [(1,2),(3,4),(5,6)]:
print(x,y)
#变为索引元素对
for i,value in enumerate(['A','B','C']):
print(i,value)

、列表生成式

list函数可以将一组对象组合为列表,[]操作也可以。[]操作的方式称作列表生成式

print([x for x in range(1,11)])
print(list(range(1,11)))

在列表生成式中可以加入一些运算规则,使生成的列表具备运算规则。

#变为索引元素对
for i,value in enumerate(['A','B','C']):
print(i,value)
#平方
print([x*x for x in range(1,11)])
#偶数平方
print([x*x for x in range(1,11) if x%2 ])
#k:v形式的列表
strdic={'a':'a1','b':'b1','c':'c1'}
print([k+':'+v for k,v in strdic.items()])
#将列表中字符串换为小写
L = ['Hello', 'World', 18, 'Apple', None]
print([s.lower() for s in L if(isinstance(s,str)) ])

、生成器

python提供生成器的功能,生成器根据函数或运算规则产生一系列数据,

通过对返回值g调用next(g)可以依次取出生成的数据。

g = (x*2 for x in range(1,11))
print(g)
print(next(g))

可以一直调用next(g),直到产生StopIteration异常。

当然也可以通过函数构造生成器,将函数return的关键字换为yield即可。

#菲波那切数列
def fib(max):
a,b,n = 0,1,0
while n < max:
yield b
a,b=b,a+b
n = n+ 1
return "exit"

通过下面方式next取出数列中的元素,第三次调用会抛出StopIteration异常。

g=fib(2)
print(g)
print(next(g))
print(next(g))
#print(next(g))

上面代码中g为迭代器,通过对g不断调用next取出数列中元素。

可以通过检测异常的方式完成遍历,避免程序崩溃。

g2 = fib(6)

while True:
try:
value = next(g2)
print("value: ", value)
except StopIteration as e:
print("Generator return value is: ", e)
break

可以用生成器实现杨辉三角,生成器函数为triangles()。

生成器函数triangles()实现如下:

def triangles():
yield [1]
yield [1,1]
lists = [1,1]
while True:
i = 1
n = len(lists)
newlists = [1]
while i < n:
newlists.append(lists[i-1] + lists[i])
i = i+1
newlists.append(1)
lists = newlists
yield newlists

、迭代器

python提供生成器的功能,生成器根据函数或运算规则产生一系列数据,

通过对返回值g调用next(g)可以依次取出生成的数据。g就是迭代器。

有的对象可以迭代但是不是迭代器,只有可以被next调用的对象才是迭代器。

同样可以通过isinstance函数判断迭代器。

from collections import Iterable
from collections import Iterator b1 = isinstance([], Iterable)
b2 = isinstance([], Iterator)
print('[] is Iteralbe', b1)
print('[] is Iterator', b2) b1 = isinstance({},Iterable)
b2 = isinstance({},Iterator) print('[] is Iteralbe', b1)
print('[] is Iterator', b2) b1 = isinstance((x*x for x in range(10)), Iterable)
b2 = isinstance((x*x for x in range(10)), Iterator)
print('x*x for x in range(10) isIterable', b1)
print('x*x for x in range(10) isIterator', b2) #可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator b1 = isinstance(triangles(),Iterable)
b2 = isinstance(triangles(),Iterator)
print('triangles()', b1)
print('triangles()', b2)

特性就总结到此,下次会总结记录python函数的一些特性。

我的公众号,谢谢关注:

python学习笔记(三)高级特性的更多相关文章

  1. Python学习笔记4 高级特性_20170618

    # 切片(获取list / tuple / 字符串 中指定的元素) l = list(range(10)) l[0:3] l[:3] # 0可以省略 l[:] # 全部 l[3:] # 最后的可以省略 ...

  2. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  3. webdriver(python) 学习笔记三

    知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...

  4. Python学习笔记三

    一. 为什么要使用函数? 函数可以方便阅读代码. 函数可以减少重复代码. 函数可以减少管理操作,减少修改操作. 二. 函数分类: 内置函数:len()   sum()   max()   min() ...

  5. Python学习笔记三:模块

    一:模块 一个模块就是一个py文件,里面定义了一些业务函数.引用模块,可以用import语句导入.导入模块后,通过 模块.函数名(参数)  来使用模块中的函数.如果存在多个同名模块,则前面模块名需要加 ...

  6. python学习笔记三--字典

    一.字典: 1. 不是序列,是一种映射, 键 :值的映射关系. 2. 没有顺序和位置的概念,只是把值存到对应的键里面. 3. 通过健而不是通过偏移量来读取 4. 任意对象的无序集合 5. 可变长,异构 ...

  7. python学习笔记(三)、字典

    字典是一种映射类型的数据类型.辣么什么是映射呢?如果看过<数据结构与算法>这一本书的小伙伴应该有印象(我也只是大学学习过,嘻嘻). 映射:就是将两个集合一 一对应起来,通过集合a的值,集合 ...

  8. python3精简笔记(三)——高级特性

    Python中 1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 切片 取一个list或tuple的部分元素是非常常见的操作.Python提供了切片(Slice)操作符 L ...

  9. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

随机推荐

  1. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 二

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  2. [转]C#学习笔记15——C#多线程编程

    一.基本概念进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的.线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存 ...

  3. mac 的一些使用技巧

    1. mac有一个自带的服务器环境, 目录路径 /Library/WebServer/Documents 打开终端  a. 启动 sudo apachectl start b. 重新启动 sudo a ...

  4. C++ 名字空间namespace的使用

    A namespace is a scope.C++ provides namespaces to prevent name conflicts.A namespace is a mechanism ...

  5. 2018软工实践—Alpha冲刺(4)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助前后端接口的开发 测试项目运行的服务器环 ...

  6. Java 常用类String类、StringBuffer类

    常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...

  7. JDK源码分析 – HashMap

    HashMap类的申明 HashMap的定义如下: public class HashMap<K,V> extends AbstractMap<K,V> implements ...

  8. 简易四则运算生成程序——添加GUI支持

    项目成员:张金生     张政 工程地址: https://coding.net/u/jx8zjs/p/paperOne/git ssh://git@git.coding.net:jx8zjs/pap ...

  9. (十一)Jmeter另一种调试工具 HTTP Mirror Server

    之前我介绍过Jmeter的一种调试工具Debug Sampler,它可以输出Jmeter的变量.属性甚至是系统属性而不用发送真实的请求到服务器.既然这样,那么HTTP Mirror Server又是做 ...

  10. 小程序解密 encryptedData 获取 unionID 等信息

    index.php <?php include_once "wxBizDataCrypt.php"; // $appid 由小程序微信官方后台获取 $appid = 'wx4 ...