码迷,mamicode.com
首页 > 编程语言 > 详细

python学习之3高级特性(廖雪峰)

时间:2017-10-10 13:12:05      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:rabl   如何   其他   类型   默认   字符串   pre   iter   数据   

高级特性

一、切片

1、取一个list或tuple的部分元素是非常常见的操作,Python提供了切片(Slice)操作符,能大大简化这种操作。例如一个list:

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

取前三个元素:  L[0:3] 。输出结果为: [Michael, Sarah, Tracy] 

 L[0:3] 表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。

如果第一个索引是0,则0可以省略,写成: L[:3] ,输出结果依然是 [Michael, Sarah, Tracy] 

由于Python支持 L[-1] 取倒数第一个元素,那么它同样支持倒数切片,如:

>>> L[-2:]
[Bob, Jack]
>>> L[-2:-1]
[Bob]

创建一个0-99的数列:

>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

前10个数,每2个取1个:

>>> L[:10:2]
[0, 2, 4, 6, 8]

所有数,每5个取一个:

>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

只写 [:] 就可以原样复制一个list:

>>> L[:]
[0, 1, 2, 3, ..., 99]

2、tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

字符串‘xxx‘也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

>>> ABCDEFG[:3]
ABC
>>> ABCDEFG[::2]
ACEG

二、迭代

在Python中,迭代是通过for ... in来完成的。

1、dict的迭代

(1)默认情况下,dict迭代的是key。

d={a:1,b:2,c:3}
for i in d:
    print(i)

输出结果是:

a
b
c

(2)要迭代value,可以用 for value in d.values() :

d={a:1,b:2,c:3}
for i in d.values():
    print(i)

输出结果是:

1
2
3

(3)要同时迭代key和value,可以用 for k, v in d.items() :

d={a:1,b:2,c:3}
for i,j in d.items():
    print(i,j)

输出结果是:

a 1
b 2
c 3

2、当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。例如字符串也是可迭代对象:

for a in ABC:
    print(a)

输出结果是:

A
B
C

3、如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

from collections import Iterable
print(isinstance(abc, Iterable))     #字符串是否是可迭代对象

输出结果是: True 

4、Python内置的 enumerate 函数可以把一个list变成索引-元素对,这样就可以在 for 循环中同时迭代索引和元素本身:

for i, value in enumerate([A, B, C]):
    print(i,value)

输出结果是:

0 A
1 B
2 C

三、列表生成式

列表生成式是python内置的简单且强大的可以用来创建list的生成式。

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

用列表生成式生成[1*1,2*2,3*3,...,10*10]:

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

输出结果是: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

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

输出结果是: [4, 16, 36, 64, 100] 

 

python学习之3高级特性(廖雪峰)

标签:rabl   如何   其他   类型   默认   字符串   pre   iter   数据   

原文地址:http://www.cnblogs.com/zj83839/p/7644798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!