您的位置:首页 > 编程语言 > Python开发

Python自学之高级语法特性

2017-05-21 14:49 651 查看
1-切片

切片用于提取一组数据list、tuple等中的一部分,个人感觉和matlab语法很相似,

例如

l[0:3]  #表示取l[0],l[1],l[2]
l[:3]   #与上面等价,初始或者结束为首尾位置,则可以缩写
l[-2:0] #表示取倒数第一个l[-1]和倒数第二个l[-2]
l[-2:]  #与上面等价
l[0:5:2]#表示以2个2个取,得到l[0],l[2],l[4]
l[::2]  #表示2个2个取整个数据集


切片也同样适用于字符串,

'ABCDEFG'[0:2]  #结果取AB


2-迭代

Python可以对任何可迭代对象进行迭代,迭代使用for x in y的形式进行迭代。

#d = {'a'='1','b'='2'}
for key in d:       #遍历d的key,输出
print(key)
for value in d.values()    #用于迭代dict的value
for x,y in d.items()       #用于同时迭代dict的key 和value


如何判断是否为可迭代对象呢?

引入函数

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False


3-列表生成式

最简单的列表生成

[x + 1 for x in range(1,5)]
[2,3,4,5]


增加条件的列表生成

[x + 1 for x in range(1,5) if x%2 ==0]
[3,5]


双层列表生成

[x + y for x in 'ABC' for y in '123']
['A1','A2','A3','B1','B2','B3','C1''C2','C3']


简单应用,例如把list里面的所有字符串的第一个字母变成小写

m = ['He','She']
[l[0].lower() + l[1:] for l in m]   #输出['he','she']


4-生成器(generator)

利用列表生成式,我们可以一次性生成许多数据,如果我们只需要使用其中一部分,进行动态的生成,不用一次性占用很多内存,循环进行到哪里,就计算出下一个值,就可以使用生成器,生成器的使用有两种方法,

第一种,使用列表生成的generator:

>>>g = (x+1 for x in range(0,4))    #将[]变成()
>>>g
#不会输出,因为这个时候g是一个generator,还未开始动态生成
>>>g = (x+1 for x in range(0,4))
>>>for value in g:
print(value)
1
2
3
4


第二种针对无法使用列表生成式写出的复杂过程,可以使用函数进行generator,与一般函数不同的是,一般函数执行函数内部语句直到执行到return就退出函数体,generator的函数使用yield表示生成一次,执行到第一个yield时候就出该值,然后从这个位置开始继续执行下去,执行到最后一句语句或者return的时候就退出函数体。

def tri(n):
l = [1]
while n > 0:
n =n - 1
yield l
l = [l[x] + l[x+1] for x in range(len(l)-1)]
l.insert(0,1)
l.append(1)
for x in tri(4):
print(x)

#结果
#[1]
#[1,1]
#[1,2,1]
#[1,3,3,1]


上述两种方法都可以使用next()函数进行不断求得下一个数值,

Tips

使用生成器生成的序列是一种惰性序列,他只在你需要的范围内在需要的时候生成,并且可以是一个无限序列,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: