20170220 Part 1 数据结构及算法(一)

人生苦短,我用 Python  之前零零散散的看过一些python的基础知识,现在想好好学习一下了,立帖为证。以《Python cookbook》为学习材料

Part 1 数据结构及算法(一)

1.1 解压序列赋值给多个变量

a.将含有N个元素的序列复制给M(M<=N)个变量

M=N时

>>> list = range(3)
>>> x,z,y = list
>>> x
0
>>> y
2
>>> z
1

b.当M<N时,不想截取的元素用_代替,注意_只可以代替一个元素的位置

>>> list = range(3)
>>> _,x,_ = list
>>> x
1

当M<<N并且只想截取里面部分元素时,可以用*代替中间多个元素,例如想截取除去序列头尾两个元素时,用函数实现

def drop_first_last(list):
    first, * middle, last = list
    return middle
if __name__ == '__main__':
    list = range(10)
    print(drop_first_last(list))
结果是:

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

c.保留最后N个元素

保留有限记录可考虑collections中的deque(当限制长度的deque增加超过限制数的项时, 另一边的项会自动删除)

比如,下面的代码在多行上面做简单的文本匹配,并只返回匹配成功的前N行:

from collections import deque

def search(lines,pattern,history = 5):
    pre_lines = deque(maxlen = history)
    for line in lines:
        if pattern in line:
            yield line,pre_lines
        pre_lines.append(line)

if __name__ == '__main__':
    with open('input.txt') as inputfile:
        with open('output.txt', 'w') as outputfile:
            for line,pre_lines in search(inputfile,'python',5):
                for pline in pre_lines:
                    outputfile.write(pline)
                outputfile.write(line)
                outputfile.write('-'*20)

其中,input.txt的内容如下:

how are you,Kitty
test
I am fine
Hello world !
I love programming !
I love programming !
python is very usefull !
you know what
i don't know
i use

输出结果:

test
I am fine
Hello world !
I love programming !
I love programming !
python is very usefull !
--------------------

充电时刻:

Python Deque 模块使用详解

Deque模块是Python标准库collections中的一项。它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除.
q = deque(maxlen = N):创建一个最大长度为N的deque序列,当长度超过N时,会自动截取最后N个元素,即丢掉最老
的元素(真是喜新厌旧丫)。当参数省略,则会提供一个无限大小的序列。
q.append():添加元素到序列
q.pop():删除最后一个元素
q.leftpop():删除第一个元素
q.extend():扩展序列


?


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值