一.切片

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

取出前三个元素 , 笨方法就是通过下标一个一个获取 [L[0], L[1], L[2]]

Python做好了封装

可以通过切片就行快速获取

L[0:3] 进行获取 还可以倒着来 比如L[-2,-1]

取出前几个 L[:N]

后几个L[N:]

前几个每几个取一个L[:N:X]

所有数每几个取一个L[::X]

其中字符串也可以进行切片 例如C#的substring(N,X) 当然tuple也肯定可以.

二.迭代

给list或者tuple进行遍历 我们叫做迭代

如何判断一个对象是否可迭代呢 通过isinstance关键字

>>> isinstance('abc', Iterable) # str是否可迭代

True

如果要对集合实现类似JAVA那样的下标循环怎么办?

Python内置了一个enumerate函数可以将list变成 索引-元素对,这样就可以for循环迭代索引和元素本身

for i ,value in enumerate(['a','b','c'])

print(i,value)

如果要循环多个tuple可以这么搞

>>> for x, y in [(1, 1), (2, 4), (3, 9)]:

... print(x, y)

...

1 1 2 4 3 9

练习 :使用迭代找到list中最大和最小的数,并返回一个tuple

def findmaxandmin(L):

if L!=[]:

max = L[0]

min = L[0]

for i in L:

if i>max:

max = i

elif i

min = i

return(min,max)

else:

return (None,None)

>>> a = findmaxandmin([7,11,17,4,8])

>>> print(a)

(4, 17)

三.列表生成式

列表生成式即list comprehensions,是python非常简单却非常强大的可以用来创建list的生成式

举个例子: 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

L = []

for x in range(1,11):

L.append(x*x)

但是这种方式有点呵呵了..让我们看一种高级的写法

[x * x for x in range(1, 11)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

这种方式是列表生成式用处的最好体现.

[x + n for x in 'ABC' for n in 'FGH']

['AF', 'AG', 'AH', 'BF', 'BG', 'BH', 'CF', 'CG', 'CH']

呵呵..还有这种骚操作...

for 循环的后面还可以加上if判断

>>> [x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

比如查看当前目录的文件

import os

>>> [d for d in os.listdir('.')]

['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'Scripts', 'tcl', 'Tools', 'vcruntime140.dll']

for循环可以循环多个变量,例如 d = {'x':'A','y':'a','E':'C'} for x,v in d.items():print(k,'=',v)

但是不够简洁,我们这个时候就还可以使用列表生成式..[k +'='+v for k,v in d.items()] 结果 : ['x=A', 'y=a', 'E=C']

比如将一组字符串转换为小写 L = ['ASFAS','Acaac']>>> [v.lower() for v in L]结果 : ['asfas', 'acaac']

反正用处多多了,再见了列表生成式...

四.生成器

通过列表生成式,我们可以直接创建一个列表,但是,但是收到内存限制,列表容量肯定是有限的,而且创建100万个元素,不仅占据了很大的内存空间,而且我们们就仅仅用那几个元素.那后面绝大的空间就白白浪费了.所以.如果列表元素根据那种算法推算出来,这样就可以去掉不必要的元素,从而节省大量内存,在Python中,这种"一边循环一边计算的机制" 叫做 "generator".

创建generator的方法和列表生成器差不多,就是把中括号变成括号 [列表生成式] ----(生成器)

示例:

>>> [x*x for x in range(1,10)] ##这是列表生成式

[1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x*x for x in range(10)) ##这是生成器

>>> g

at 0x000001E4C1D82318>

但是我们应该怎么去访问里面的元素的呢.. Python让我们通过next关键字 一个一个去里面找

>>> next(g)

0

>>> next(g)

1

>>> next(g)

4

>>> next(g)

9

>>> next(g)

16

>>> next(g)

25

>>> next(g)

36

>>> next(g)

49

>>> next(g)

64

>>> next(g)

81

>>> next(g)

Traceback (most recent call last):

File "", line 1, in

StopIteration

generator保存的是算法,每次调用next(n),就会计算出n的下一个元素.直到最后一个元素.没有更多的元素时,抛出StopIteration的错误.

不过!!!,这太变态,正确的方式应该是通过for循环,因为generator是可迭代对象.

isinstance(g,Iterable) --》true

>>> for i in g:

print(i)

所以我们创建了一个generator后,基本上永远都不会用到next() ,二十通过for循环去迭代它,并不需要关心StopIteration的error

网上的一个斐波拉契数

用函数表示

def fib(max):

n, a, b = 0, 0, 1

while n < max:

print(b)

a, b = b, a + b

n = n + 1

return 'done'

其中赋值的操作 n,a,b = 0,0,1相当于 t = (0,0,1) #t就是个tuple, n = t[0] a = t[1] b = t[2]

其中斐波拉契数就非常类似generator 我们需要如何修改呢 : 直接将print 改成yield.

五.迭代器

我们已经知道,可以直接用于for循环的数据类型有以下几种:

一类是集合类型:list、tuple、dict、set、str 等

一类是generator,包括生成器与带tyield的generator function

可以被迭代的对象统称叫做Iterable

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

可以使用isinstance()判断一个对象是否是Iterator对象:

有趣的是生成器都是Iterator对象,但list、dict、str虽然是Iterable,但不是Iterator...

把Iterable转换为Iterator转换为可以用到iter()函数 (L = (1,2,3) Liter = iter(L))

python 高级_Python高级特性(一)相关推荐

  1. python3进阶高级_python高级进阶

    [直播预告]蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程 主讲人:萧恺(蚂蚁金服-支付宝事业群-高级开发工程师) 本名:肖汉松 讲师介绍:热爱阅读,喜欢挑战,热衷尝试新的技术,关注技术背后的 ...

  2. python设计要求_Python高级应用程序设计任务要求

    import numpy as np import pandas as pd import requests as req from bs4 import BeautifulSoup from bs4 ...

  3. python编程设计高级_Python高级应用程序设计

    一.主题式网络爬虫设计方案(15分) 1.主题式网络爬虫名称 链家二手房成交信息(福州地区) 2.主题式网络爬虫爬取的内容与数据特征分析 本爬虫程序爬取链家网福州二手房的成交信息,分别从户型.面积.成 ...

  4. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  5. python里面的高级特性

    python里面的高级特性 1.切片(Slice) >>> L[0:3] ['Michael', 'Sarah', 'Tracy'] L[0:3]表示,从索引0开始取,直到索引3为止 ...

  6. python编程设计高级_Python编程高级技巧| 选择好的名称

    点击标题下「异步图书」可快速关注 大部分标准库在构建时都要考虑可用性.例如,内置类型的使用是很自然的,其设计非常易于使用.在这种情况下,Python可以与你开发程序时所思考的伪代码进行比较.大部分代码 ...

  7. 阿里云python自测答案_阿里云技能测试python初级中级高级

    简介 偶尔发现,阿里云-开发者社区,里竟然有技能测试平台 覆盖知识面也较多 初级(65) 涉及知识点:Python语言的基本特性.编程环境.语法基础.数据结构,了解Python的网络编程与Web开发, ...

  8. Python入门篇-高级数据类型集合(set)和字典(dict)

    Python入门篇-高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.集合(set) 1>.集合的特点 约定set 翻译为集合c ...

  9. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

最新文章

  1. marked Options
  2. Linux系统平台上安装和配置Ruby on Rails
  3. 初识Docker-Docker的安装
  4. TensorFlow学习笔记(二十八)CNN的9大模型之AlexNet
  5. maven的dependency 和 dependencymanagement
  6. 英语语法最终珍藏版笔记-18what 从句的小结
  7. centerOS安装chkrootkit
  8. 用css样式画三角形(提示框三角形)
  9. python海龟绘图圆形_python之海龟绘图
  10. 设计模式笔记十八:中介者模式
  11. 两个栈实现队列+两个队列实现栈----java
  12. oracle数据库查询下级_Oracle 图技术
  13. python dlib gpu ubuntu conda_Ubuntu 下编译支持 GPU 的 TensorFlow 和 Dlib
  14. 新升级带特效喝酒神器小程序源码-多种游戏支持流量主
  15. 阿里云移动推送iOS
  16. CODESYS Automation Server
  17. 大数据平台核心架构图鉴,建议收藏!
  18. 单片机延时C语言程序
  19. 旧文重发:IP 库的那些事儿之 2013 - 2014 流水帐版~
  20. win32com处理excel数据透视表格式

热门文章

  1. 流媒体传输协议详解之---RTSP认证
  2. DWR实现服务器端向客户端推送消息
  3. 大话重构连载9:大布局你伤不起
  4. Spark 1.0.1源码安装
  5. python 中字符串大小写转换
  6. 解析Java对象引用与JVM自动内存管理(2)
  7. MapReduce-从HBase读取数据处理后再写入HBase
  8. bzoj 4563 [Haoi2016]放棋子 错位排列+高精度
  9. psql执行sql的方式及一些基本命令
  10. 20171113_Python学习五周一次课