六、列表、列表解析、过滤器filter和map
列表:
动态可伸缩:使用C中的数组实现,但C中数组长度不变,但为什么python列表可变?增加元素和删除元素底层使用数组copy操作
为什么可以动态增多删除列表元素?
列表中元素可以不同类型??因为python面向对象,面向对象的三要素:指针(对象地址,64位平台地址就是64位)、对象类型、对象值。对象在同一平台指针都一样
加法和乘法运算:
下标是从0开始,可以是负数:正负数代表方向,负数时是从右到左,且起始值为-1,不在是0.
列表切片:
[begin:end:step] :python的整套语法几乎区间都是右半开区间,如range()
切片是左闭右开的半开区间,不包含右边界
begin、end都是下标,可以是负数
setp代表步幅和方向
切片中的下标可以越界,而取数组元素下标不可以越界
----------------------------------------------------------
#列表操作
x=range(1,4)
y=range(6,9)
print x,y
print x+y #合并成一个新的数组
print x*2 # x*y是不可以的
#列表切片:
print x[::] #正向切片,step默认为1
print x[::-1] #用切片来取反
z=range(1,10)
print z[-1:-10:-2] #[9, 7, 5, 3, 1]
print z[1:-10:-2] #[2]
#print x[11] #取数组下标不能越界
print x[1:11:2] #切片下标可以越界
----------------------------------------------------
列表的常用操作:
append、extend、del
enumertate(iter) :取索引和对应的值
len
reversed :反向
sorted :可以指定排序规则
sum
-------------------------------------------------------
#列表常见操作append、append、__delitem__
x.append(6)
x.append(8)
print x
n=[1,2,3]
x.append(n) #将对象添加进来
x.append(10)
print x
x.__delitem__(6) #删除是按下标删除
print x
#enumertate(iter)
for (index,value) in enumerate(y):
print index,value
#reversed
print x.__len__()
n=range(-6,10)
print sorted(n)
n.reverse() #到排序
print n
print sorted(n,key=abs)
print sum(y)
-----------------------------------------------------------
列表解析:
根据一个列表生成一个新的列表
列表解析比for循环遍历好,代码紧凑,比for性能好些
[expr for iter in iterbale[if condition]] #外层的[]表示返回列表
-----------------------------------------------------------
#列表解析 n中负数乘以2,整数保持不变,返回列表
result=[]
m=range(-5,5)
for i in m:
if i<0:
result.append(i**2)
else :
result.append(i)
print result
#上述的循环和下面的解析一样
print [i**2 for i in m if i<0 ] #小于0的乘以2
print [i**2 if i<0 else i for i in m ] #多条件这样写,和for循环样的
-------------------------------------------------------------
列表过滤:
filter(fun,list):根据fun(x)返回True、False对list中的元素进行过滤操作
map:根据fun(x)作用于每一个元素,返回一个封装新的列表
-------------------------------------------------------------------
#定义一个函数
def a(x) :
if x > 0 :
return True
else :
return False
#定义一个列表
li = range(-10,10)
print li
print filter(a,li) #过滤所有负数
def b(x):
if x > 0 :
return x
else :
return x**2
print map(b,li) #负数需要平方
---------------------------------------------------------------------