python相对简单所以没怎么系统整理过,通常都是现学现卖。但考虑到开学可能要用,正好暑假有时间整理下相关知识点,属于比较偏基础的整合,督促自己复习一遍吧。

切片

首先切片是针对list或tumple这样的有序结构的快捷操作,拿一个简单的list作为example:

l = [1,2,3,4,5,6]

最基本取前三个:

l[0:3] #即0-2的位置,最后一个不取

如果从开头或结尾则可以省略,如取第二个以后的元素:

l[2:]

倒叙切片也是重要特性,如取最后两个元素:

l[-2:]

切片也可以规定步数:

l[start:end:step]

线性表

字典

字典是按 键值对 来存储数据的,其中key和value一一对应,这就要求了key的值不能相同,故使用了set来存储了key。

遍历dict是对key的遍历,要遍历其值需要加value():

dict ={"a":1,"c":3,"b":2,"d":4}
for name in dict:
    print(name) # a b c d
for value in dict.values():
    print(value) # 1 2 3 4

生成器

生成1到10的list:

list = list(range(1,11))

快速生成1-10 的平方的列表,可以直接在【】里定义:

[x*x for x in range(1,11)]

也可以多重循环:

[m+n for m in "abc" for n in "ABC"]

python中可使用生成器generator来不必存储所有生成数据,使用()来表示:

g = (x*x for x in range(10))

函数中也可以用yield来完成返回对象是生成器。

生成器是迭代器,即可以使用next()来迭代查询,而list,set等是iterable(可迭代)而不是迭代器。

map/reduce

函数名也可以作为参数输入,如:

def add(x,y,f = abs):
    return f(x)+f(y)

map函数接受两个参数,作用函数f和作用序列(iterable),将f作用在序列元素上的结果作为迭代器。

g = map(abs,[1,-1,0]) #iteraor
list(g) # [1,1,0]

reduce函数用法如下:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

例如:

def add(x,y):
    return x*10 + y

reduce(add,[1,3,5,7]) #1357

使用两者构建str2int函数:

from functools import reduce
    def fn(x, y):
    return x * 10 + y

def char2num(s):
    digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return digits[s]

reduce(lamda x,y:x*10+y, map(char2num, '13579'))#13579

filter

filter同样需要两个参数,作用函数和可迭代序列,filter也会将函数作用于序列各元素,但会筛选出作用结果为True的元素加入生成器,如:

def is_odd(n):

if(n%2==0):
    return True
else:
   return False

list(filter(is_odd,[1,3,4,5,6,9]))  #[4, 6]

Comments

2019-08-10

⬆︎TOP