python学习2--列表和元组

二列表和元组 
2.1 序列 
python中最基本的数据结构是序列。 
python有6种内建序列:列表、元组、字符串、unicode字符串、buffer对象和xrange对象。 
列表和元组的主要区别:列表能够修改,元组不能够修改; 

通用的序列操做:索引、分片、加、乘、检查某个元素是否属于序列的成员、计算序列长度、计算最大 

元素和计算最小元素。 

2.1.1 索引 
序列中的元素是从索引0开始; 

但是使用负数做为索引,-1表示最后一个元素; 

若是一个函数返回一个序列,能够直接对返回结果进行索引操做: 
如:fourth = raw_input("Year: ")[3] =>当输入2011后,fourth的值为1; 

2.1.2 分片 
使用分片,访问必定范围内的元素。分片经过冒号相隔的两个索引实现。 
如:myname = ‘caiyuanwei’ 
myname[3:7] =》‘yuan’   //输出索引值为3到索引值7前面的元素 
[前索引:后索引)-----》从前索引开始到后索引以前结束,不包括后索引的元素。!!!!! 

分片的技巧: 
获取最后元素:myname[-3:]  =》'wei' 
获取最前元素: myname[:3] =》 ‘cai’ 
显示所有:       myname[:] =》 ‘caiyuanwei’ 
注意若是分片中第一个索引比第二个索引在序列中晚出现,则会返回空序列。 

分片的步长: 
默认步长为1;若是更改步长则在两个索引后用冒号分隔:如[前索引:后索引:步长] 
如:mynumber = [1,2,3,4,5,6,7,8,9,10] 
mynumber[::4] =》 [1,5,9]//步长为4,隔3个元素输出第四个元素 

步长技巧: 
步长不能为0!!!!!! 
步长能够为负数,负数步长表明倒序输出!!! 
如:mynumber[8:3:-1] =》 [9,8,7,6,5]//从第8个元素倒序到第4个元素 
mynumber[0:10:-2] =》 []//0比10在序列中更早出现,因此无输出 
mynumber[::-2] =》 [10,8,6,4,2]//倒序输出 
mynumber[5::-2] =》[6,4,2] 
mynumber[:5:-2] =》[10,8] 

2.1.3 相加 
两种相同类型的序列能够进行相加操做,不相同的类型不能相加,如:字符串和列表,虽然都是序列, 

可是不能相加。 

2.1.4 相乘 
对序列进行乘法操做,会生成新序列,将原序列复制x次。 

2.1.5 None、空列表和初始化 
None是python的内建值,表示为空(相似于c的null) 
若是想创建一个长度必定的空列表能够:[None]*n 

2.1.6 成员资格 
判断一个值是否在序列中,使用in运算符,若是存在返回True,不然返回False 
如:myname = ‘caiyuanwei’ 
‘yu’ in myname  =》True 

2.1.7 长度、最小值和最大值 
取序列长度len(); 
取序列中最大值max(); 
取序列中最小值min(); 

2.2 列表 
2.2.1列表建立 
list(‘Hello’);//list函数用于建立一个列表,能够由其它类型序列建立,如例子中由字符串建立列表。 

2.2.2列表操做 
2.2.2.1列表元素赋值 
用索引能够改变该索引所在的列表元素的值。不能给不存在的元素赋值。 

2.2.2.2列表元素删除 
使用del操做符能够删除列表中某个索引的元素。 
如:test = list('1234567')  =》['1','2','3','4','5','6','7'] 
test[1] = 3 =>['1','3','3','4','5','6','7'] 
del test[1] => ['1','3','4','5','6','7'] //列表长度在元素删除后回减少 

也可删除片:del test[2:5] =》 ['1','2'] 

2.2.2.3分片赋值 
test = list('12345678'); 
test[1:4] = []; =》['1','5','6','7','8']//替换空元素,实现删除 

test[1:1] = list('234'); =》['1','2','3','4','5','6','7','8']//使用相同的索引位置,能够在该位置实现插入 

test[1:] = list('abc'); =》['1','a','b','c']//从某个索引位置开始替换到结尾 

test[:] = list('ffff') = 》['f','f','f','f'] 

2.2.2.4列表方法 
python中方法的概念:方法是与对象有紧密联系的函数。 
方法的调用方式:对象.方法(参数) 
列表的方法:(1)append用于列表尾追加元素。append方法直接修改原列表而不是返回一个新列表。 

(多是python中方法和函数的区别) 
(2)count方法用于统计某个元素出现测次数。 
(3)extend方法用于在列表尾追加另外一个列表(扩展)。list1.extend(list2),修改list1,list2不变。 
        extend看起来像链接(+)操做,可是链接只会生成新的列表副本,而不会改变原有两个列表。 
用链接实现扩展(extend):a= a+b,虽然能够实现可是没有extend方法效率高。 
用分片替换实现扩展(extend):a[len(a):] = b;能够实现可是可读性很差。 
(4)index方法用于找出第一个与给定值匹配的元素的索引位置。若是没有该值则异常。 
(5)insert方法用于向列表中插入对象。对象.insert(插入位置,插入值);也能够用分片赋值实现插入。 
(6)pop方法用于删除列表中某一元素。默认删除最后一个元素。该方法返回被删除的元素的值。 
        pop是惟一一个既能修改列表又返回元素值的列表方法。 
        默认的append和pop方法结合使用能够实现栈的操做(LIFO) 
        使用insert(0,...)和pop方法能够实现队列的操做(FIFO) 
(7)remove用于移除列表中的某个值的第一个匹配项。remove是一个没有返回值的原位置改变方法, 

它修改列表可是没有返回值。 
(8)reverse方法将列表中的方法反向存储。 
(9)sort方法用于在原位置对列表排序,原位置意味着改变列表而不是返回列表副本。(升序排列) 
        注意sort没有返回值,若是当遇到想对某列表进行排序,可是又不想改变原列表的状况下,则须要 

以下操做: 
    y = x[:];//将列表x复制给y   注意若是只简单的用y = x,实际上y和x仍是指向的同一个对象! 
    y.sort(); 
        sorted函数能够生成一个列表的副本,sorted是函数不是方法,它能够用于任何序列,但返回值都 

为列表。 
        高级排序: 
        sort方法参数:1.能够指定排序比较函数,lst.sort(cmp); 
        2.能够给每一个元素建立键,按照键排序,lst.sort(key = len); 
        3.能够指定是否反向排序,lst.sort(reverse = True); 

 

2.3 元组
元组值不能改变,元组没有方法,由于不能改变。即便元组只有一个值也要用‘,’分开!!
42 不是元组,(42)也不是元组,(42,)才是元组。
3*(40+2)  =》126
3*(40+2,) =》(42,42,42)

2.3.1 tuple函数:将一个序列转换为元组
2.3.2 元组不可替代的缘由:
    1.元组能够在映射中看成键使用,但列表不能够。
    2.元组做为不少内建函数和方法的返回值存在。 python

相关文章
相关标签/搜索