列表的使用:
1、 列表的删除:不可以在遍历的过程中删除链表,这样会得到不可预知的后果。可以使用列表的过滤,来获得新的列表。
2、 列表的过滤:
def filterFun(node):#这个函数做了两个事情哎。
node.cycleCount = node.cycleCount -1
return node.cycleCount < 0
timeoutList = filter(filterFun, timerList)
对timerList中的每个节点执行函数filterFun,根据filterFun返回的结果,为真的项组成一个新的列表。
3、 map: kvlist = map(lambda x:x.strip(), kvlist)。同时,map可以接受多个列表,这个时候,函数也会接受多个参数,分别表示列表的每一个元素:
kvlist = map(lambda x,y:x+y, [1,2,3], [4,5,6])
如果函数为None,则相当于函数zip:
zip([1,2,3],[4,5,6])
[(1,4),(2,5),(3,6)]
4、 生成器表达式:l = [node for node in xrange(5) if node - 3 < 0]:这个的这个方法一定程度上可以替代过滤器和map。
生成器表达式定义:
[expr foriter_var in iterable if cond_expr]
l = [2 for x inxrange(5)]#结果是生成一个含有5个2的列表
5、 print(reduce(lambda x,y: x*y, [2 for x in xrange(38)]))
上面的这个语句是计算2的38次方的值。它用到的是二元函数reduce。它第一次调用是将第一个和第二个元素做入参,后面用他们的结果做x,新的元素做y,最后返回值。
另外,在获取一个38个2的列表也可以使用:[2] * 38。这可能更可读一点。
6、 enumerate:对列表处理,返回的是列表的索引以及节点。
for index, node in enumerate(timerList):
if timerId == node.timerId and timerEvent ==node.timerEvent:
del timerList[index]
7、 列表的分片:[1,2,3,4],l[1:-1]表示从索引从1到倒数第一个,不包含倒数第一个。如果要从某位置到最后,则应该:[1:]
8、 l[i:j:k]:表示切片,从i到j,步长为k。