Python笔记2#Python高级特性(Slice,Iteration, List Comprehensions,Generator)

▲切片Slice

在很多编程语言中,针对字符串提供了很多截取函数,其实目的就是对字符串进行切片。Python没有针对字符串的截取函数,只需要切片一个操作就能完成。Python切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。示例代码如下:


>>> L=‘ABCDEFG‘

>>> L[2:5]

‘CDE‘

>>> L[:5]

‘ABCDE‘

>>> L[-5:]

‘CDEFG‘

>>> L[::2]

‘ACEG‘

>>> L[:]

‘ABCDEFG‘

>>> H=list(range(50))

>>> H[10:20]

[10,
11,
12,
13,
14,
15,
16,
17,
18,
19]

>>> K=[‘wddoer1‘,‘wddoer2‘,‘wddoer3‘,‘wddoer4‘]

>>> K[:3]

[‘wddoer1‘,
‘wddoer2‘,
‘wddoer3‘]

?

▲迭代Iteration

如果给定一个list或tuple,我们可以通过for…in…循环来遍历这个list或tuple,这种遍历我们称为迭代。

Python的for循环抽象程度要高于Java的for循环,因为Python循环不仅可以用在有下标的数据类型,还可以用在无下表的可迭代对象,例如dict、字符串。

默认情况下,dict迭代的是key,如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k,v in d.items()。示例代码如下:


>>> d =
{‘wddoer1‘:11,
‘wddoer2‘:22,
‘wddoer3‘:33,
‘wddoer4‘:44}

>>>
for k in d:

...
print(k)

...

wddoer3

wddoer1

wddoer4

wddoer2

>>>
for v in d.values():

...
print(v)

...

33

11

44

22

>>>
for k,v in d.items():

...
print(k, v)

...

wddoer3 33

wddoer1 11

wddoer4 44

wddoer2 22

?

如果要对list或tuple实现类似Java的下标循环的话,Python内置的enumerate函数可以把它变成索引元素对。示例代码如下:


>>>
for i,v in enumerate((‘a‘,
‘b‘,
‘c‘)):

...
print(i, v)

...

0 a

1 b

2 c

?

如何判断一个对象是可迭代对象?通过collections模块的Iterable类型判断。示例代码如下:


>>>
from collections import Iterable

>>> isinstance(‘abc‘, Iterable)

True

>>> isinstance(123, Iterable)

False

?

▲列表生成式List Comprehensions

列表生成式是Python内置的简单却强大的用来创建list的生成式。示例代码如下:


>>> tuple(range(1,
11))

(1,
2,
3,
4,
5,
6,
7,
8,
9,
10)

>>> list(range(1,
11))

[1,
2,
3,
4,
5,
6,
7,
8,
9,
10]

>>> list(x * x for x in range(1,
11))

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

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

[4,
16,
36,
64,
100]

>>>
[m + n for m in
‘abc‘
for n in
‘123‘]

[‘a1‘,
‘a2‘,
‘a3‘,
‘b1‘,
‘b2‘,
‘b3‘,
‘c1‘,
‘c2‘,
‘c3‘]

#lower()大写变小写,非字符串类型没有此方法

>>> list(s.lower()
for s in
[‘IBM‘,
‘ASUS‘,
‘Apple‘])

[‘ibm‘,
‘asus‘,
‘apple‘]

?

使用Python内建的isinstance函数判断一个变量是不是字符串。示例代码如下:


>>> isinstance(‘abc‘, str)

True

>>> isinstance(123, str)

False

?

▲生成器Generator

通过列表生成式,我们可以直接创建一个列表。但是受到内存限制,列表容量是有限的。如果列表按照某种算法推算出来,那我们可以再循环过程中不断推算出后续的元素。这种一边循环一边推算的机制,称为生成器。

创建generator的两种常用方法:

  1. 把列表生成式的最外层[]改为()
  2. 函数定义的代码块中包含yield关键字,这个函数就不是普通函数,而是generator

与普通函数不同的是,Generator函数在每次调用__next__()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

我们创建一个generator后,基本不会调用__next__()方法,而是通过for循环来迭代。

示例代码如下:


>>> g =
(x for x in range(10))

>>> g

<generator object <genexpr> at 0x01736E68>

>>> g.__next__()

0

>>> g.__next__()

1

>>>
for x in g:

...
print(x)

...

2

3

4

5

6

7

8

9

#用generator函数定义Fibonacci数列

>>>
def
fib(num):

... x, a, b =
0,
0,
1

...
while x < num:

...
yield b

... a, b = b, a+b

... x = x +1

...

>>> fib(5)

<generator object fib at 0x01736E18>

>>> tuple(n for n in fib(8))

(1,
1,
2,
3,
5,
8,
13,
21)

>>>
print(n for n in fib(5))

<generator object <genexpr> at 0x01736EE0>

>>>
for n in fib(6):

...
print(n)

...

1

1

2

3

5

8

?

?

时间: 2024-08-29 19:37:24

Python笔记2#Python高级特性(Slice,Iteration, List Comprehensions,Generator)的相关文章

python学习之面向对象高级特性

类属性与实例属性类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.在前面的例子中我们接触到的就是实例属性(对象属性),它不被所有类对象的实例对象所共有,在内存中的副本个数取决于对象个数. 05_类属性鱼实例属性.py import random class Turtle(object): # power是类属性. power = 100 def __init__(self): # x,y:实例属性. self.x = random.randint(0, 10)

[原创]Python入门学习之高级特性

一 前言 学习高级特性的时候也许会感觉到有些许的难,这些新的特性在以前c/c++中是没有遇到过的,而且c/c++也不支持这样简便但又强大的语法. 二 切片 谈到切片,可以想像到切萝卜,拿到萝卜的某一段,用这个来比喻这里的切片非常贴切.python中的切片操作就是取list或者tuple中的某一段. 比如,有以下定义的list: #define a list l=['Luffy','Corey','Nancy','Jeffrey','Kyle','Avery','Jason','Sunny'] 取

AT&amp;T学习笔记汇编之高级特性

高级特性: SIMD    single instruction multiple  data 单指令多数据 SIMD扩展  Streaming SIMD Extension    (SSE) 流化扩展第二实现  SSE2 第三    SSE3 MMX   对整数执行SIMD操作 64位打包字节,字,双字整数, MMx  0-7    映射到FPU寄存器R0-7 使用FSAVE,FXSAVE指令将FPU寄存器保存到内存中,防止和浮点指令混淆. SSE主要对浮点数执行SIMD操作.128位打包的单

python第四天高级特性

切片操作 :如何取前三个元素,通过循环?可以通过切片操作 L[0:3],其中第一个参数表示切片的开始元素:第二个参数表示取到第几个元素结束:第三个参数表示取值时的跳跃间隔. 倒数切片:L[-2:]输出的是 8,9 tuple和list一样具有切片操作特性,字符串也是一种list,因此字符串也可以进行切片,只是操作的结果是字符串 迭代:只要是可迭代对象,不管它是list还是tuple集合 dict集合的迭代 1.key迭代 2.value迭代 3.key和value一起迭代 判断一个对象是否可以迭

Python笔记7#面向对象高级编程二

▲定制类 Python中有许多类似__slots__这样有特殊用途的函数,可以帮助我们定制类. 官方文档链接:https://docs.python.org/3.4/reference/datamodel.html#special-method-names 1)__str__和__repr__ 示例代码如下: >>> class Student(object): ... def __init__(self, name): ... self.name = name ... >>

【Python笔记】Python的几个高级语法概念浅析:lambda表达式 &amp;&amp; 闭包 &amp;&amp; 装饰器

本文主要记录自己对几个高级语法概念的理解:匿名函数.lambda表达式.闭包.装饰器. 这几个概念并非Python特有,但本文只限于用Python做说明. 1. 匿名函数 匿名函数(anonymous function)是指未与任何标识符绑定的函数,多用在functional programming languages领域,典型应用场合: 1) 作为参数传给高阶函数(higher-order function ),如python中的built-in函数filter/map/reduce都是典型的

python Requests 的一些高级特性

会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能.所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升. (参见 HTTP persistent connection). 会话对象具有主要的 Requests API 的所有方法. 我们来跨请求保持一些 cookie: s = requests.Session() s

Python(八)高级特性

迭代(iteration) 判断一个对象可迭代: 1.可以通过for循环来遍历 2.通过collections模块的iterable类型判断 如果要对 list 实现类似 Java 那样的下标循环怎么办: python内置的枚举方法enumerate,把一个 list 变成索引-元素对 列表生成式 for循环输出结果(输出1-10之间所有整数求平方之后的结果): In [41]: [i**2 for i in range(1,11)]Out[41]: [1, 4, 9, 16, 25, 36,

Python笔记6#面向对象高级编程一

▲__slots__ 当定义一个class并创建了一个class的实例之后,我们可以给该实例绑定任何属性和方法.这就是动态语言的灵活性. 实例代码如下: #定义一个类Student >>> class Student(object): ... pass ... #创建类Student的一个实例stu1 >>> stu1 = Student() #给实例绑定一个属性name >>> stu1.name = 'michael' >>> s