##1. append(x) 追加到链尾。 ##2. extend(L) 追加一个列表,等价于+=。 ##3. insert(i,x) 在位置i 插入x,其余元素向后推。如果i 大于列表的长度,就在最后添加。如果i 小于0,就在最开始处添加。 ##4. remove(x) 删除第一个值为x 的元素,如果不存在会抛出异常。 ##5. reverse() 反转序列。 ##6. pop([i]) 返回并删除位置为i 的元素,i 默认为最后一个元素(i 两边的[]表示i 为可选的,实际不用输入)。 ##7. index(x) 返回x 在列表中第一次出现的位置,不存在则抛出异常。 ##8. count(x) 返回x 出现的次数。 ##9. sort() 排序。 ##10. len(List) 返回List 的长度。 ##11. del list[i] 删除列表list 中指定的第i+1 个变量。 test=[1,2,"three","yes"] print test test.append(1)#追加到链接尾 print "将append(1)之后:",test test.extend(["no","maybe"])#追加一个列表 print "追加一个列表,extend()之后",test test.remove("no")#删除一个值为"no"的元素,如果不存在抛出异常ValueError print "remove('no')之后",test try: test.remove("not") except ValueError: print "remove('not')删除一个没有的元素抛出了一个ValueError异常并且test为:",test del test[2] #删除一个元素 test.reverse()#反转序列 print "reverse()之后:",test test.pop()#弹出一个元素,默认为最后一个 print "弹出第二个元素pop(1):",test.pop(3),test #弹出一个元素(即返回并删除位置i的元素,i默认为最后一个元素) print "index('yes'),yes的索引为:",test.index("yes") print "count('1')返回'1'出现的次数",test.count("1")#['maybe', 1, 'yes', 2] 注意类型 print "count(1)返回1出现的次数",test.count(1) test.sort()#排序 print test print "test的元素的个数:len(test):",len(test) ts=[1,2,3,4,5,6,7,[1,2,3,4,5]] print len(ts)#ts包含8个元素,ts中的列表元素[1,2,3,4,5]算一个, t=[x for x in range(9)] for i in range(-9,9): print "索引为%s的元素:"%str(i),t[i] #################################################################################### #################################################################################### #################################################################################### #切片 test1 = ['never', 1, 2, 'yes', 1, 'no', 'maybe'] test2=test1 print test1 print test1[0:3]#包括test[0],不包括test[3] print test1 if test1==test2: print "切边不改变原有的列表" else: print "切片改变原有列表" print "test1[:-1]包括第一个不包括最后一个",test1[:-1] print "test1[-3:]抽取最后三个",test1[-3:] print "test1为:",test1 print "test1[::-1]",test1[::-1]#倒叙排列 print "test[1:4:-2]",test1[::-2] #################################################################################### #################################################################################### #################################################################################### #列表推导式 freshfruit=[" banana "," apple "," loganberry "] print freshfruit print [weapon.strip() for weapon in freshfruit] #strip()是去除字符串2端的多余的空格 vec=[2,4,6,8,10] print [3*x for x in vec if x>5] print [(x,x**2) for x in vec]#循环变量要是一个sequence,而[x,x**2 for x in vec]是错误的 l1=[x for x in range(20)] l2=[x for x in range(100,120)] print l1,l2 print ["*" for x in l1 for y in l2]#输出400个* print [l1[i]+l2[i] for i in range(len(l1))] print [x*y for x in l1 for y in l2] print [str(round(355/113.0,i)) for i in range(1,6)] list3=[1,2,3] x,y,z=list3 print "x,y,z:",x,y,z #拆分操作可以应用于所有sequence
列表解析
在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:
[expr for iter_var in iterable] [expr for iter_var in iterable if cond_expr]
第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
举例如下:
>>> L= [(x+1,y+1) for x in range(3) for y in range(5)]
>>> L
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]
>>> N=[x+10 for x in range(10) if x>5]
>>> N
[16, 17, 18, 19]
生成器表达式
生成器表达式是在python2.4中引入的,当序列过长, 而每次只需要获取一个元素时,应当考虑使用生成器表达式而不是列表解析。生成器表达式的语法和列表解析一样,只不过生成器表达式是被()括起来的,而不是[],如下:
复制代码代码如下:
(expr for iter_var in iterable)
(expr for iter_var in iterable if cond_expr)
例:
>>> L= (i + 1 for i in range(10) if i % 2)
>>> L
<generator object <genexpr> at 0xb749a52c>
>>> L1=[]
>>> for i in L:
... L1.append(i)
...
>>> L1
[2, 4, 6, 8, 10]
生成器表达式并不真正创建数字列表, 而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来。 生成器表达式使用了“惰性计算”(lazy evaluation,也有翻译为“延迟求值”,我以为这种按需调用call by need的方式翻译为惰性更好一些),只有在检索时才被赋值( evaluated),所以在列表比较长的情况下使用内存上更有效。A generator object in python is something like a lazy list. The elements are only evaluated as soon as you iterate over them.
一些说明:
1. 当需要只是执行一个循环的时候尽量使用循环而不是列表解析,这样更符合python提倡的直观性。
for item in sequence:
process(item)
2. 当有内建的操作或者类型能够以更直接的方式实现的,不要使用列表解析。
例如复制一个列表时,使用:L1=list(L)即可,不必使用:
L1=[x for x in L]
3. 如果需要对每个元素都调用并且返回结果时,应使用L1=map(f,L), 而不是 L1=[f(x) for x in L]