2018年刚刚过完年,从今天起,做一个认真的技术人。开始进入记笔记阶段。
python内置了很多数据结构,list , set,dictionary
1、将序列分解为单独的变量
1.1 通过赋值的方式,只要等号左右的变量个数与结构与序列一致
p=(4,5)
x,y=p
1.2不只是序列,只要是可迭代的对象,都可以进行分解
s='hello'
a,b,c,d,e = s
如果想丢弃某些变量, 可以选一个用不到的变量,作为丢弃值的名称。
data=['ABC', 50, (2012,1,2)]
_, price , _ = data , 这里用到的是下划线
records = [
('foo', 1, 2),
('bar', 'hello'),
('foo', 3, 4)
]
def do_foo(x, y ):
print ('foo', x, y)
for tag, *args in records:
if tag == 'foo':
do_foo(*args)
1.3 保存最后的几个变量
collections.deque
q = deque(maxlen=3),长度为3的一个队列
q.append(1)
q.append(2)
q.append(3)
q.append(4)
q.appendleft() 从左侧入参数, q.popleft(), q.pop()
from collections import deque
def search(lines, pattern , history =5 ):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
if __name__ == '__main__':
with open('some.txt') as f :
for line , previouslines in search(f, 'python', 5):
for pline in previouslines:
print(pline, end='& ')
print(line, end='% ')
print('-'*20)
1.4 找出最大或者最小的n个元素
import heapq
nums=[1,3,2,9,4,8,7,6]
smalllist = heapq.nsmallest(3,nums)
biglist = heapq.nlargest(3,nums)
1.5在list中可以经常用到一个列表推导式:
x = 'abcde'
y = 'hijkl'
comp = [(m,n) for m in x if m >'a' for n in y if n >'h']
推导式与filter, map的比较:
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新listmap()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回
生成器的表达式:
如果数据比较多时,list明显需要占用太多的内存,生成器才是比较好的选择