Python核心基础知识

1. filter

filter(function, sequence)返回一个序列(sequence),包括了给定序列中所有调用function(item)后返回值为true的元素。

>>> def f(x):
···     return x%2 != 0
... 
>>> filter(f, range(1,11))
[1, 3, 5, 7, 9]

2. map

map(function, sequence)为每一个元素依次调用function(item)并将返回值组成一个链表返回。

>>> def square(x):
...     return x*x
... 
>>> map(square, range(1,11))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

3. reduce

reduce(func, sequence)返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数,再以返回值和第三个参数调用,依次执行下去。

>>> def sum(x,y):
...     return x+y
... 
>>> reduce(sum, range(1,11))
55

4. lambda表达式

def创建的函数是有名字的,lambda创建的是匿名函数,灵活使用lambda使程序更加简洁。1~3中传入filter/map/reduce的函数可以直接写成下面的形式:

>>> filter(lambda x: x%2 != 0, range(1,11))
[1, 3, 5, 7, 9]
>>> map(lambda x: x*x, range(1,11))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> reduce(lambda x,y: x+y, range(1,11))
55

5. 链表推导式

链表推导式提供了一个创建链表的简单途径,无需使用map(), filter() 以及lambda。返回链表的定义通常要比创建这些链表更清晰。每一个链表推导式包括在一个for 语句之后的表达式,零或多个 for或 if 语句。返回值是由 for 或if子句之后的表达式得到的元素组成的链表。如果想要得到一个元组,必须要加上括号。

>>> [x for x in range(1,11) if x%2 != 0]
[1, 3, 5, 7, 9]
>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [x+y for x in range(1,11) for y in range(11,12)]
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
>>> [(x,x**2) for x in range(1,11)]
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81), (10, 100)]

6. 循环操作

  • 字典循环:关键字和对应的值可以使用iteritems()方法同时解读出来。
>>> scores = {'Alex':90, 'Bob':80, 'Jack':59}
>>> for k,v in scores.iteritems():
...     print k,':',v
... 
Bob : 80
Alex : 90
Jack : 59
  • 单个序列循环:索引位置和对应值可以使用enumerate()函数同时得到。
>>> for i,v in enumerate(['Alex','Bob','Jack']):
...     print i,v
... 
0 Alex
1 Bob
2 Jack
  • 多个序列循环:用zip()进行整体解读。
>>> name = ['Alex','Bob','Jack']
>>> scores = [90, 80, 59]
>>> for n,s in zip(name, scores):
...     print n,'==>',s
... 
Alex ==> 90
Bob ==> 80
Jack ==> 59
  • 其他循环:for循环可以有一个 else 子句;它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被 break 中止的情况下不会执行。
>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print n, 'equals', x, '*', n/x
...             break
...     else:
...         print n, 'is a prime number'
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

7. 比较操作

  • 序列对象可以与相同类型的其它对象比较。比较操作按 字典序 进行:首先比较前两个元素,如果不同,就决定了比较的结果;如果相同,就比较后两个元素,依此类推,直到所有序列都完成比较。如果两个元素本身就是同样类型的序列,就递归字典序比较。如果两个序列的所有子项都相等,就认为序列相等。如果一个序列是另一个序列的初始子序列,较短的一个序列就小于另一个。字符串的字典序按照单字符的 ASCII 顺序。
  • 不同类型的对象比较是合法的。输出结果是确定而非任意的:类型按它们的名字排序。因而,一个链表(list)总是小于一个字符串(string),一个字符串(string)总是小于一个元组(tuple)等等。数值类型比较时会统一它们的数据类型,所以0等于0.0。
>>> [1,2,3] < [1,2,4]
True
>>> [1,2,3] < [1,2,3,4]
True
>>> (1,2,3) == (1.0,2.0,3.0)
True
>>> [1,2,3] < 'string'
True
>>> (1,2,3) > 'string'
True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老A的AI实验室

给博主点一杯卡布奇诺

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值