|
|
51CTO旗下网站
|
|
移动端

2.3.3 Python编程基础

《精通数据科学:从线性回归到深度学习》第2章Python安装指南与简介:告别空谈,本章介绍数据科学中最常用的IT工具:Python以及相关第三方库。本节为大家介绍Python编程基础。

作者:唐亘来源:人民邮电出版社|2018-05-24 09:24

2.3.3 Python编程基础

本小节将介绍Python的3个常用的基本数据类型:dict、list和tuple,Python特色的lambda表达式以及内置函数map、reduce和filter。

1.Python的基本数据类型

(1)dict类型在上一节已经见过。下面是它的基本操作代码展示。最好的学习方法就是动手实践,所以鼓励读者打开Python shell,跟着本书一起练习。

程序清单2-12 Python基本数据类型——dict

  1.  1    |  # dict基本操作  
  2.  2    |  ## 初始化一个dict类型变量x  
  3.  3    |  >>> x = {"a": 1, "b": 2, "c": 3}  
  4.  4    |  >>> print x  
  5.  5    |  {'a': 1, 'c': 3, 'b': 2}  
  6.  6    |  >>> 
  7.  7    |  ## 读取x中的一个元素,直接读取或者使用”get方法  
  8.  8    |  >>> print x["a"], ",", x.get("a")  
  9.  9    |  1 , 1  
  10. 10    |  ## 读取x中不存在的一个元素,注意直接读取会报错  
  11. 11    |  >>> print x["d"]  
  12. 12    |  Traceback (most recent call last):  
  13. 13    |    File "<stdin>", line 2, in <module> 
  14. 14    |  KeyError: 'd'  
  15. 15    |  ## 使用”get方法返回None值;可以在”get方法中使用默认值  
  16. 16    |  >>> print x.get("d")  
  17. 17    |  None  
  18. 18    |  >>> print x.get("d", "No such key")  
  19. 19    |  No such key  
  20. 20    |  >>> 
  21. 21    |  ## 修改dict  
  22. 22    |  >>> x["c"] = 4  
  23. 23    |  ## 插入新的键值对  
  24. 24    |  >>> x["d"] = "5"  
  25. 25    |  >>> print x  
  26. 26    |  {'a': 1, 'c': 4, 'b': 2, 'd': '5'}  
  27. 27    |  ## 删除键值对  
  28. 28    |  >>> del x["c"]  
  29. 29    |  >>> print x  
  30. 30    |  {'a': 1, 'b': 2, 'd': '5'} 

(2)list就是列表类型,可以将任意元素放进一个列表里。

程序清单2-13 Python基本数据类型——list

  1. 1    |  # list基本操作  
  2.  2    |  ## 初始化一个list类型变量y  
  3.  3    |  >>> y = ["A", "B", "C", "a", "b", "c"]  
  4.  4    |  >>> print y  
  5.  5    |  ['A', 'B', 'C', 'a', 'b', 'c']  
  6.  6    |  >>> 
  7.  7    |  ## 读取y中的元素  
  8.  8    |  >>> print y[0]  
  9.  9    |  A  
  10. 10    |  >>> print y[-1]  
  11. 11    |  c  
  12. 12    |  >>> print y[0: 3]  
  13. 13    |  ['A', 'B', 'C']  
  14. 14    |  ## 查找y中的元素  
  15. 15    |  >>> print y.index("a")  
  16. 16    |  3  
  17. 17    |  >>> 
  18. 18    |  ## 修改list  
  19. 19    |  >>> y[0] = 4  
  20. 20    |  >>> print y  
  21. 21    |  [4, 'B', 'C', 'a', 'b', 'c']  
  22. 22    |  ## 在y的最后面插入新元素  
  23. 23    |  >>> y.append(5)  
  24. 24    |  >>> print y  
  25. 25    |  [4, 'B', 'C', 'a', 'b', 'c', 5]  
  26. 26    |  ## 在指定位置插入新元素  
  27. 27    |  >>> y.insert(3, "new")  
  28. 28    |  >>> print y  
  29. 29    |  [4, 'B', 'C', 'new', 'a', 'b', 'c', 5]  
  30. 30    |  ## 两个list合并,注意和append的区别  
  31. 31    |  >>> print y + ["d", "e"]  
  32. 32    |  [4, 'B', 'C', 'new', 'a', 'b', 'c', 5, 'd', 'e']  
  33. 33    |  >>> y.append(["d", "e"])  
  34. 34    |  >>> print y  
  35. 35    |  [4, 'B', 'C', 'new', 'a', 'b', 'c', 5, ['d', 'e']]  
  36. 36    |  ## 删除y里面的元素  
  37. 37    |  >>> y.remove("B")  
  38. 38    |  >>> print y  
  39. 39    |  [4, 'C', 'new', 'a', 'b', 'c', 5, ['d', 'e']] 

(3)tuple也称为元祖类型,与列表功能非常相似,不同之处是元祖里面的元素不能被修改。

程序清单2-14 Python基本数据类型——tuple

  1. 1    |  # tuple基本操作  
  2.  2    |  ## 初始化一个tuple类型变量z  
  3.  3    |  >>> z = ("a", "b", "c", "d", "e")  
  4.  4    |  >>> print z  
  5.  5    |  ('a', 'b', 'c', 'd', 'e')  
  6.  6    |  >>> 
  7.  7    |  ## 读取z中的元素,与list类似  
  8.  8    |  >>> print z[0]  
  9.  9    |  a  
  10. 10    |  >>> print z[-1]  
  11. 11    |  e  
  12. 12    |  >>> print z[0: 3]  
  13. 13    |  ('a', 'b', 'c') 

2.lambda表达式和内置函数map、reduce、filter

在Python中,lambda表达式类似于函数。它以关键字“lambda”开头,之后就是函数的参数列表,并以“:”结尾。紧接着就是表达式主体,整个只是一行语句。这样说可能很抽象,我们来看下面这个具体的例子。比如下面的f和g是等价的。f是普通定义的函数,而g是lambda表达式。

程序清单2-15 lambda表达式和常用内置函数

  1. 1    |  >>> def f(a, b):  
  2. 2    |  ...     return a + b  
  3. 3    |  ...  
  4. 4    |  >>> print f(1, 2)  
  5. 5    |  3  
  6. 6    |  >>> g = lambda x, y: x + y  
  7. 7    |  >>> print g(1, 2)  
  8. 8    |  3 

有的读者可能会有疑问,既然g与函数f等价,那什么时候会用到lambda表达式呢?答案是创建匿名函数时。我们先看下面这个例子:

程序清单2-15 lambda表达式和常用内置函数

  1. 9    |  ## 内置map函数和lambda表达式  
  2. 10    |  ## l是一个0~5的列表  
  3. 11    |  >>> l = range(6)  
  4. 12    |  >>> print l  
  5. 13    |  [0, 1, 2, 3, 4, 5]  
  6. 14    |  ## 下面的操作将生成一个新的列表,列表里面的元素为l里元素加1  
  7. 15    |  >>> def addOne(data):  
  8. 16    |  ...     re = []  
  9. 17    |  ...     for i in data:  
  10. 18    |  ...         re.append(i + 1)  
  11. 19    |  ...     return re  
  12. 20    |  ...  
  13. 21    |  >>> 
  14. 22    |  >>> print addOne(l)  
  15. 23    |  [1, 2, 3, 4, 5, 6]  
  16. 24    |  ## 通过内置的map函数和lambda表达式可以达到同样的效果  
  17. 25    |  >>> print map(lambda x: x + 1, l)  
  18. 26    |  [1, 2, 3, 4, 5, 6]  
  19. 27    |  ## 达到同样功能的列表生成式  
  20. 28    |  >>> print [i + 1 for i in l]  
  21. 29    |  [1, 2, 3, 4, 5, 6] 

内置的map函数有两个参数,第一个是一个函数;第二个是一个可遍历的对象,比如list、tuple和dict等。map函数将第二个参数里的每个元素依次传给作为第一个参数的函数,并将函数的返回值依顺序组成一个列表。

如第25行代码所示,map函数将“l”里面的每一个数字按顺序传给lambda表达式,得到加1后的值。并将这些值依次插入结果列表里面。计算过程和上面第15~19行代码定义的addOne函数一样。

在第25行代码中,lambda表达式就定义了一个匿名函数,因为它起到了函数的功能,但又没有任何标识符来代表它,所以很形象地被命令为匿名函数。

上面的第28行代码是一种很简洁的书写方式,被称为“列表生成式”。在实际的Python开发中,应用也特别广泛。对于第一次接触Python的读者来说,这样的书写方式显得怪怪的。不过慢慢地,你就会发现它的好处并爱上它。比如下面的这个例子。

程序清单2-15 lambda表达式和常用内置函数

  1. 30    |  ## 计算l中每个元素的两倍和平方,并将两种组成一个列表  
  2. 31    |  ## lambda表达式和Python函数一样,也可以接受函数作为参数  
  3. 32    |  >>> twoTimes = lambda x: x * 2  
  4. 33    |  >>> square = lambda x: x ** 2  
  5. 34    |  >>> print [map(lambda x: x(i), [twoTimes, square]) for i in l]  
  6. 35    |  [[0, 0], [2, 1], [4, 4], [6, 9], [8, 16], [10, 25]] 

一行Python语句就搞定了,是不是很方便呢?最后,我们来看看filter和reduce的用法。

程序清单2-15 lambda表达式和常用内置函数

  1. 36    |  ## 内置filter函数,选择l中的偶数  
  2. 37    |  >>> filter(lambda x: x % 2 == 0, l)  
  3. 38    |  [0, 2, 4]  
  4. 39    |  ## 内置reduce函数,计算l的和  
  5. 40    |  >>> reduce(lambda accumValue, newValue: accumValue + newValue, l, 0)  
  6. 41    |  15 

filter函数和map函数非常相似。只不过filter函数是用来做筛选的。它会根据作为第1个参数的函数返回值来剔除掉返回值为0的元素。而reduce函数是用来做聚合运算的。以上面的代码为例,第1个参数是相加函数,第2个参数是需要求和的列表“l”,第3个(可选)参数为初始值0。

以上就是Python编程的基础知识。



喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

一目了然——Web软件显性设计之路

本书阐述了为什么以及如何设计出简单易用的基于Web的软件,让用户单凭常识即可有效地使用它。主要内容包括:显性设计的概念、如何理解用户...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊