#-- coding: utf-8 -- #列表:和数组类似,能够保存任意数量任意类型的python对象,使用中括号包裹。支持切片运算,元素的个数与元素的值均可以改变。 #元组:和列表类似,支持切片运算,但是元素的个数以及元素的值无法修改。使用括号包裹。 #字典:键-值对组成,使用大括号包裹。其实就是HASH表的实现。 #Test the list in the python #新建列表 l1 = []#新建一个空的list l2 = [1,2,3,4]#建一个list,索引为0-3 l3 = ["abc", ["def", "ghi"]]#建一个嵌套的list print l3 a_list = ['a', 1, ('a', 'b')] b_list = ['a', 'b', 0, 1, 3] print a_list a_list[0:0] = ['hello'] print "在列表的头部插入一个元素后为: ", a_list a_list[1:1] = ["victor"] print "在列表的第二个位置插入一个元素为: ", a_list print b_list print "切片b_list[1:3]: ", b_list[1:3]#切片,输出b_list中的第二个到第四个的元素 print "b_list[:3]: ", b_list[:3] print "b_list[3:]: ",b_list[3:] print "b_list[:]: ",b_list[:] #创建连续的list list1 = range(1,5) list2 = range(1,10,2) print "list1: ", list1 print "list2: ", list2 #删除链表的值 for i in range(len(list2)): if list2[i] == 9: del list2[i] print "list2中删除9之后为: ", list2 #更新 list2[1] = "victor"#更新list2中第二个元素,设置为“victor” print "After update the second element: ", list2 #遍历 print "a_list中的元素依次为: " for element in a_list: print element #list的方法 list = []#创建一个空的list print "最初的list: ", list #增加 list.append("Hello, ")#向末尾追加元素 print 'append("Hello"): ', list list.extend(list2)#向末尾追加一个list print 'extend(list2): ', list list += list2#在末尾追加一个list print "list += list2: ", list #查找 print "The count of 1: ", list.count(1) print "list.index(1): ", list.index(1)#得到list中第一次出现1的位置 list.sort()#对list的元素进行排序 print "sort()", list list.reverse()#对list中的元素进行逆序排列 print "reverse(): ", list print list.pop()#默认得到list的最后一个元素并从list中删除 print "pop(): ", list list.remove(list[1])#删除第二个元素,如果知道具体删除的内容就用remove方法 print "remove(1): ", list list.insert(1,"Victor")#在第二个位置插入 print 'insert(1,"victor"): ', list del list[2]#删除第三个元素,如果不知道具体删除的内容就用这种方法 print "del list[2]: ",list print "得到列表%s的长度%d: " %("a_list", len(a_list))
其中对列表中元素的删除
list = [1,1,1,2,3,4] for i in range(len(list)): if list[i] == 1: del list[i]
这样是会报错的,因为在删除的时候列表元素的下标发生了变化。
可以使用如下方法删除:
list = filter(lambda x:x!=1,list) #或者 list = [i for i in list if i!=1]
lambda的用法:转自http://my.oschina.net/davehe/blog/122418
python允许用lambda来创建匿名函数,匿名是因为不需要以标准的方式来声明,而def创建的方法是有名称的,它们主要有2个地方不一样
1.lambda表达式返回可调用的函数对象.但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量.
2.lambda 它只是一个表达式,而def是一个语句
对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。 lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。用lambda赋值非常有用,由于它只是一个表达式,它可以直接作为python 列表和元组,字典的成员。
sum = lambda x: x**2
在lambda这里没有办法用def语句直接代替,因为def是语句,不是表达式不能嵌套在里面,lambda表达式在":"后只能有一个表达式。也就是说,在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义lambda后面.因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。
另外lambda函数可以很好和python中内建filter(),map(),reduce()函数的应用程序结合起来,因为它们都带了一个可执行的函数对象.
1filter(...)
filter(function or None, sequence) -> list, tuple, or string
给定一个'过滤函数'和一个对象的序列,每个序列元素都通过这个过滤器进行筛选,保留函数返回为真的对象.filter函数为已知的序列的每个元素调用给定布尔函数.每个filter返回的非零(true)值元素添加到一个列表中.
例如使用filter()来获得任意奇数的列表脚本.
from random import randint allNums = [] for eachNum in range(10): allNums.append(randint(1,100)) print filter(lambda x: x%2,allNums) #使用filter()来移除所有偶数
2.map(...)
map(function, sequence[, sequence, ...]) -> list
map()内建函数与filter()相似,因为它也能通过函数来处理序列,但map()将函数调用'映射'到每个序列的元素上,并返回一个含有所有返回值的列表。
例如,映射函数是给每个进入的数字加10,并且将这个函数和一个数字的列表传给map().
map(lambda x:x+10,[0,1,2,3,4,5,6,7,8,9]) [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
3.reduce(...)
reduce(function, sequence[, initial]) -> value
它通过取出序列的头两个元素.将他们传入二元函数来获得一个单一的值来实现.然后又用这个值和序列的下一个元素来获得又一个值,然后继续直到整个序列的内容都遍历完毕以后最后的值会被计算出来为止.
reduce(func,[1,2,3]) 等同于 func(func(1,2),3)
例如:计算从1加到10的和
print 'the total is:',reduce((lambda x,y:x+y),range(1,11)) the total is: 55