学以致用

古之成大事者,不惟有超士之才,亦唯有坚韧不拔之志

Python的数据结构和函数编程

《Python的数据结构和函数编程》

一,数据结构在大学期间,学习计算机科学类的同学应该是都学过的。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是编程的基础。

Python有4个内建的数据结构–List(列表)、Tuple(元祖)、Dictionart(字典)以及Set(集合)

1,列表/元祖

列表和元祖都是序列结构,相似却又不同。列表是用方括号标记的,如a=[1,2,3],而元祖是用圆括号标记的,如b=(4,5,6),访问列表和元祖中的方式都是一样的。

从功能上看,列表与元祖的区别是,列表可以被修改,而元祖不可以。列表的解析功能,可以简化我们对列表内元素逐一操作的代码。

a=[1,2,3]
b=[]
for i in a :
     b.append(i+2)

可以简化到

a=[1,2,3]
b=[i+2 for i  in a ]

2,字典

Python引入了“自编“这样一个概念,实际上是一个映射。通常来说,他是一个列表,然而他的下标不再是以0开头的手,而是让自己定义的”键“(key)开始。

创建一个字典的基本语法为

d= {'today':20,'tomorrow':30}

这里的‘today’和‘tomorrow’就是字典点击键,他在整个字典中必须是唯一的,而20,30就是键对应的值,访问字典中元素的方法也很直观。

 d{'today'} #该值为20
 d{'tomorrow'} #该值为30

3,集合

Python内置了集合这一数据结构,同数学上的集合的概念基本一致,他与列表的区别在于:1,他的元素是不重复的,而且是无序的;2,它不支持索引。一般通过花括号{}或者set()函数创建一个集合。

    s={1,2,2,3}  #注意 2会自动去重,得到{1,2,3}
    s=set ([1,2,2,3]}

由于集合的特殊性,因此有一些集合的运算。在数据分析中,并不常用。

二,函数式编程

函数式编程或者函数程序设计,又称泛函数编程,他将计算机上的运算视为数学上的函数计算。

在Python编程中,函数式编程主要由几个函数的使用构成:lambda()、map()、reduce()、filter()。lambda主要用来定义”行内函数“。

1,map()

假设有一个列表a=[1,2,3],要给列表中的每个元素都加2,得到一个新的列表,利用列表解析可以这样写:

   b=[ i+2 for i  in a ]

而利用map函数,我们可以这样写:

   b=map(lambda x: x+2,a)
     b=list(b)  #结果是 [3,4,5]

也就是说,我们先定义一个函数,然后再用map()命令将函数逐一应用到(map)列表中的每个元素,最后返回一个数组。

2,reduce()

Reduce()函数用于递归运算,例子,算N的阶乘:

reduce(lamdba x,y :x * y , range(1,n+1)

其中range相当于给了一个列表,元素是1到n这n个整数。lambda x,y:x*y 构建了一个二元函数,返回两个数的乘积。循环命令如下:

 s=1
 for i in  range(1,n+1):
     s=s*i

3, filter()

该函数是一个过滤器,用来筛选列表中符合条件的元素。例如:

b=filter(lambda x: x>5  and x<8 , range(10))
b=list(b)  #结果是[6,7]

使用filter函数首选要一个返回值为bool型的函数,上述的filter语句,可以用列表解析写为:

b= [i for i in range(10)  if  i>5 adn i<8]

 

最后,使用函数的目的是为了让代码更加简洁和效率,这里需要兼顾。通常这些函数要比Python内置循环语句要快的多。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注