##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]
posted on 2013-07-14 13:53  神·鲸落  阅读(486)  评论(0编辑  收藏  举报