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

python学习笔记(三)高级特性

时间:2017-05-23 13:13:06      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:cti   对象   font   print   world   hello   学习笔记   yield   取出   

一、切片

 

  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学习笔记(三)高级特性

标签:cti   对象   font   print   world   hello   学习笔记   yield   取出   

原文地址:http://www.cnblogs.com/secondtonone1/p/6892928.html

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