1.切片
序列:字符串,列表,元组
终止位置为空:表示从开始位置取到最后一个位置(步长为正:正着取 步长为负:倒着取)
l[start:end:span]----[开始位置:终止位置:步长]
遍历 [start,end),间隔为 span,当 span>0 时顺序遍历, 当 span<0 时,逆着遍历。
start 不输入则默认为 0,end 不输入默认为长度。
>>> a=list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::2]
[0, 2, 4, 6, 8]
>>> a[::-2]
[9, 7, 5, 3, 1]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0::-1]
[0]
>>> a[0:9:-1]
[]
>>> a[-1:0:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
2.lambda匿名函数
➢lambda语句被用来创建新的函数对象,并且在运行时返回它们。
➢Python使用lambda关键字来创建匿名函数。匿名是因为不需要以标准的方式来声明,比如说, 使用 def 语句
➢lambda只是一个表达式,函数体比def简单很多
➢lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表 达式中封装有限的逻辑进去。
➢lambda函数拥有自己的名字空间,且不能访问自由参数列表之外全局名 字空间里的参数。
➢虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数, 后者的目的是调用小函数时不占用栈内存从而增加运行效率。
➢lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def 则会把函数对象赋值给一个变量(函数名)。
➢像if或for或print等语句不能用于lambda中。
➢lambda函数不能共享给别的程序调用,def定义的函数可以
匿名函数的语法:参数可选
lambda [arg1[, arg2, ... argN]]: expression
例:
>>> a=lambda x,y=3:x+y
>>> a(2)
5
>>> a(1,2)
3
补充:
lambda的语法
lambda argument_list: expression
输入:[argument_list:参数列表]
输出:[expression:表达式]表达式计算得出的值
>>> a = [lambda x:i*x for i in range(5)]
>>> [f(2) for f in a]
[8, 8, 8, 8, 8]
>>> a = []
>>> for i in range(5):
... a.append(lambda j:i*j)
...
>>> [f(2) for f in a]
[8, 8, 8, 8, 8]
>>> a = []
>>> for i in range(5):
... def test(x, i=i):
... return x*i
... a.append(test)
...
>>> [f(2) for f in a]
[0, 2, 4, 6, 8]
>>> a = []
>>> for i in range(5):
... def test(x):
... return x*i
... a.append(test)
...
>>> [f(2) for f in a]
[8, 8, 8, 8, 8]
>>>
>>> a=[lambda x,i=i:i*x for i in range(5)]
>>> [f(2) for f in a]
[0, 2, 4, 6, 8]
3.map(func, *iterables) --> map object
Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.
可迭代对象(iterables)的每个元素执行func函数后的结果集。该结果的类型为map object,一般会转换为list后执行其他操作
#1.与lambda函数配合使用
>>> map(lambda x:x+1,[1,2,3])
#返回值类型:map object
<map object at 0x0000016D261CD400>
>>> list(map(lambda x:x+1,[1,2,3]))
[2, 3, 4]
#2.与自定义函数,配合使用
>>> def func(x):
... x=x+1
... return x
...
>>> list(map(func,[1,2,3]))
[2, 3, 4]
4.filter(function or None, iterable) --> filter object
Return an iterator yielding those items of iterable for which function(item) is true. If function is None, return the items that are true.
Filter()函数可以对序列做过滤处理,就是说可以使用一个自定义的函数过滤一个序列,把可迭代对象的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最后一次性返回过滤后的结果。(只保存返回为True的部分,返回为False的部分会被过滤掉)
Filter()函数有两个参数:
第一个,函数名或None,必须
第二个,需要过滤的可迭代对象,必须
#1.与lambda函数配合使用
>>> filter(lambda x:x>3,[1,2,4,5])
#返回值类型:filter object
<filter object at 0x0000016D25EC3438>
>>> list(filter(lambda x:x>3,[1,2,4,5]))
[4, 5]
#2.与自定义函数,配合使用
>>> def func(x):
... if x>3:
... return x
...
>>> list(filter(func,[1,2,4,5]))
[4, 5]
#3.function is None
>>> list(filter(None,['',(),{},True,False,0,1]))
[True, 1]
备注:判断是否可迭代的方法
>>> from collections import Iterable
>>> isinstance('abc',Iterable)
True
5.推导列表---包含表达式,for 循环,if判断句
>>> [x for x in range(5)]
[0, 1, 2, 3, 4]
>>> [x*2 for x in range(1,11)]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
>>> [x*2 for x in range(5) if x%2==0]
[0, 4, 8]
>>> [int(x+y) for x in ["1","2","3"] for y in map(str,range(10)) if int(x+y)<=30
... ]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> print ([k + '=' + v for k, v in d.items()])
['x=A', 'y=B', 'z=C']
#计算key的和
>>> sum([key for key in {1:'a',2:"b","a":3} if isinstance(key,int)])
3
#计算key和value的和
>>> sum([key for key in {1:'a',2:"b","a":3} if isinstance(key,int)]+[value for value in {1:'a',2:"b","a":3}.values() if isinstance(value,int)])
6
#大写字母转小写字母
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> print ([s.lower() for s in L])
['hello', 'world', 'ibm', 'apple']
#数组转化1----[[1,2,3],[4,5,6],[7,8,9],[10,11,12]] → [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
for i in range(3):因为有3列,所以遍历3次
for j in a:遍历每一行
当i =0时:[j[i] for j in a] 表示获取每行的第1列,放到列表中
当i =1时:[j[i] for j in a] 表示获取每行的第2列,放到列表中
当i =2时:[j[i] for j in a] 表示获取每行的第3列,放到列表中
>>> a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
>>> print ([ [j[i] for j in a] for i in range(3)])
[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
#数组转化2----[[1,2,3],[4,5,6],[7,8,9],[10,11,12]] → [[2, 3], [5, 6], [8, 9], [11, 12]]
for i in a:遍历列表的每一行
for j in [1,2]:遍历列表的第二列和第三列
j分别取1,2代表列表的第二列和第三列
[i[j] for j in [1,2]]:
表示每一行的第二列和第三列元素,存到子列表中
>>> a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
>>> print ([[i[j] for j in [1,2]] for i in a])
[[2, 3], [5, 6], [8, 9], [11, 12]]
6.reduce
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). If initial is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty.
reduce内建函数是一个二元操作函数,他用来将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数func()(必须是一个二元操作函数)先对集合中的第1,2数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
#使用前,必须先引入reduce
>>> from functools import reduce
例:累加
>>> lst = [1,2,3,4,5]
>>> print reduce(lambda x,y:x+y,lst)
15
>>> reduce(lambda x,y:x+y,range(1,101))
5050
例:累乘
>>> reduce(lambda x,y:x*y,range(1,5))
24