170115

来源:互联网 发布:淘宝千牛客服怎么设置 编辑:程序博客网 时间:2024/06/07 17:35

1625-5    王子昂    总结《2016年1月15日》  【连续第107天总结】

A.python两节

B.列表中可以包含任意数量和任意类型的元素,包括用户自定义类型的对象,甚至可以包含不同类型的元素

这点与C++是完全不同的

列表在声明或者说创建的时候无需给定大小,只需要赋值即可。

当需要新增元素的时候可以通过appen()方法来动态添加,更新的时候直接使用下标,或者说切片操作符[]来直接赋值即可

删除的时候使用del语句,可以删除整个列表,或是指定某个部分,如del a[3]

或使用remove()方法,可以删除指定值,如alist=[1,2] alist.remove(2)

测试后知,remove只会从前往后删除第一个值,而不是把所有值相同的都删除;若列表中不存在值则报错

列表中的元素可以是另一个序列,所以列表是可以多次切片的

例如a[1][1]='1' 。这有些类似多维数组

可以使用'+'连接操作符把两个列表连接成一个,但是它们必须类型相同;实际上是新生成一个内存空间来保存合成列表

而extend()方法则可以把一个列表的元素直接添加入另一个列表中,这样可以节省内存空间,不过代价是原列表将会被破坏

可以对序列类型使用'*'来得到多次重复的内容

例如:a="123",a*2"123123"

列表解析: [i*2 for i in [8,-2,5]] →[16,-4,10]

[i for i inrange(8) if i %2 ==0][0,2,4,6]

序列类型函数:

sorted()//排序(字符串元素以ASCII码值之和作为值)

reversed() //逆序输出

enumerate()//返回一个有索引的序列

eg:a=[a,b,c]print enumerate(a)[(1,a),(2,b),(3,c)]

zip()//返回一个序列,每项元素的值都是参数列表的该项元素的合成;

eg:x=[1,2,3]

y=[4,5,6]

xy=zip(x,y)

print xy[(1,4),(2,5),(3,6)]

//zip的参数可以只有一个序列,此时返回的序列值为[(1,),(2,),(3,)]

//当zip的多个参数序列长度不同时,舍去较长序列的多余的元素

u=zip(*xy)

print u[(1,2,3),(4,5,6)]

//*list表示将该list拆开,每项元素单独作为一个元素传递给函数

//一般认为这是一个unzip的过程

sum()//累加

sum(list)等价于reduce(operator.add,list)

//reduce(方法,序列) 将序列的元素依次送入方法参数中

list()和tuple()

接受可迭代对象作为参数,并通过浅拷贝数据来创建一个新的列表或者元组。

一般用于列表和元组的互相转换。比如说将元组转换为列表,它的值就可以更新了

注:因为是浅拷贝数据,所以列表的地址是不同的,但元素地址是一致的

另外,因此数字和字符串都是不可更改类型的,因此当对其修改时,实质上都是重新生成一块内存空间并赋值给引用

所以当原来列表的元素是数字、字符串时,修改元素并不会引起另一个序列的元素改变

但是如果原列表的元素是列表,对子列表的元素进行修改会引起另一个序列的元素改变(因为子列表的地址不变)

另外虽然数据是浅拷贝,但序列是不同的,因此对一个列表执行tuple()和list()以后,它的地址是不同的

也就是说,实质上这两个函数都是新生成一个序列来存放相同元素(的引用)

注意序列的切片操作符实际上是前闭后开的,也就是说a[1:2]只包含了a[1]

元组的不可变特性仅针对它的元素。也就是说,如果元组中包含了一个列表,完全可以修改这个列表的元素,项数。

可以对子列表做任何事,只要不修改“子列表的地址”

另外还可以对元组进行拆分整合,生成一个新的元组

C.明日计划

python一节


0 0