Python随笔(六)

Python高级特性:

切片:取一个list或tuple的部分元素

l = [1,2,3,4,5,6,7,8,9,10]
print(l[:3])      # 输出从0-2,三个元素
>>>[1,2,3]

print(l[-1])      #取倒数第一个元素
>>>[10]

print(l[-2:])     #取倒数两个元素
>>>[9,10]

print(l[:6:2])     #取前六个元素,每两个选一个
>>>[1,3,5]

print(l[::3])       #取全部元素,每三个选一个
>>>[1,4,7,10]

print(l[:])        #可以原样复制一个list
>>>[1,2,3,4,5,6,7,8,9,10]

迭代:通过for循环来遍历这个list或tuple,这种遍历叫做迭代

如果要对list或者tuple实现类似java那样的下标循环,可以使用Python内置的enumerate函数,可以把一个list编程索引-元素对:

for i,vaule in enumerate(['A','B','C']):
    print(1,vaule)

>>> 0 A
>>> 1 B
>>> 2 C

列表生成器:

l = [x*x for x in range(1,11)]
print(l)
>>> [1,4,9,16,25,36,49,64,81,100]

l = [x*x for x in range(1,11) if x%2 == 0]
print(l)
>>> [4,16,36,64,100]

l = [m + n for m in 'ABC' for n in 'XYZ']
print(l)
>>> ['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']

#列出当前目录下所有文件和目录名
import os #导入os模块
l = [d for d in os.listdir('.')]  #os.listdir 可以列出所有文件名和目录

#如果要在列表生成式中使用if...else模式(不是只有if判断时):
l = [x if x%2 == 0 else -x for x in range(1,11)]
print(l)
[-1,2,-3,4,-5,6,-7,8,-9,10]


生成器:generator,一边循环一边计算的机制,最简单的方式是把列表生成器的[ ]换成( ),可解决列表生成器,创建列表过大导致的资源浪费。

g = (x*x for x in range(10))
print(g)
#返回的是generator的内存地址。

#如果要打印内容,使用next()
print(next(g))

#吐过一个函数定义中包含yield关键字,那么这个函数就是不再是一个普通函数,而是一个generator生成器

def test(max):
    n,a,b = 0,0,1
    while n<max:
        yield b
        a,b = b,a+b
        n = n + 1
    return 'end'

#函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行,而不是从头执行。
#一般使用for循环来迭代
#如果要拿到最后的返回值,可修改为
g = test(6)
while True:
    try:
        x = next(g)
        print('g:',x)
    except StopIteration as e:
        print('Generator trturn value:',e.value)
        break
#最后会输出 Generator trturn value: end

迭代器:可以直接作用于for循环的对象统称为迭代器。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值