列表和元组的主要不同在于,列表可以修改,元组不可修改。
在自己编程的情况下,几乎所有情况下都可以所有列表来代替元组。例外情况是将元组用作字典键。因为字典键是不允许修改的。
列表表示:
>>>edward=['edward gumby',42] #序列可以包含其他序列
1.1序列的操作
索引
>>>greeting=‘hello'
>>>greeting[0] #用负数索引时,从右开始索引,-1为最后一个元素
'h'
>>>fourth = input('year:')[3] #如果函数调用返回一个序列,可以直接对其执行索引
year:2005
>>>fourth
'5'
切片
可以使用切片来访问特定范围的元素
>>>tag='<a href="http://www.python.org">python web site</a>'
>>>tag[9:30] #由你来提供两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内,第二个索引指定的元素不在切片内
'http://www.python.org'
>>>numbers[-3: ] #从尾部开始数,可以使用负数索引,第二个索引省略意思为切片结束于末尾
[8,9,10] #同样可以省略第一个索引,或两个索引都省略
步长
>>>numbers[0:10:2] #切片默认步长为1,可以输入第3个参数,来设定步长,步长为2即表示每隔一个元素提取一个元素
[1,3,5,7,9] #步长可以为负数,但是不可以是0,负数为从右向左提取元素,步长为负数时,第一个索引必须比第二个大
序列相加
>>>[1,2,3]+[4,5,6]
[1,2,3,4,5,6]
>>>[1,2,3]+'world' #不能拼接不同类型的序列
会报错
序列相乘
>>>'python'*5 #重复这个序列x次来创建一个新序列
'pythonpythonpythonpythonpython'
要创建长度为10的列表
>>>sequence=[None]*10
成员资格
使用in来检查特定的值是否包含在序列中,in检查是否满足指定的条件,如果满足,则返回相应的值:满足时返回True,不满足时返回False
>>>permissions = 'rw'
>>>'w' in permissions
True
len(),min(),max()分别返回序列包含的元素个数,序列中的最小值,最大值
list
不能像修改列表那样修改字符串,可以使用函数list来用字符串创建列表
>>>list('hello') #任何序列都可以做为list的参数
['h','e','l','l','o']
给列表元素赋值(修改)
>>>x=[1,1,1]
>>>x[1]=2
>>>x
[1,2,1]
删除元素(使用del)
>>>names=['alice','beth','cecil','dee-dee','earl']
>>>del names[2]
给切片赋值
>>>name = list('perl')
>>>name
['p','e','r','l']
>>>name[2;]=list('ar') #使用切片赋值可以将切片的长度替换与其不同的序列
>>>name
['p','e','a','r']
>>>name[1:1]=list('yth') #使用切片插入
>>>name
['p','y','t','h','e','a','r'] #甚至可以执行不同步长的切片操作,或删除
列表方法
append
将一个对象附加到列表末尾
>>>lst=[1,2,3]
>>>lst.append(4) #append就地修改列表,意味着它不会返回修改后的新列表,而是直接修改旧列表
>>>lst
[1,2,3,4]
clear
就地清空列表的内容
>>>lst = [1,2,3]
>>>lst.clear() #与切片 lst[:]=[]一样
>>>lst
[]
copy
复制列表 #不同与常规复制,常规复制只是将另一个名称关联到列表如:a=[1,2,3] b=a 要让a与b指向不同的列表,就要将b关联到a的副本
>>>a=[1,2,3]
>>>b=a.copy() #与b=a[:]或b=list(a)一样,都是修改复制的a的副本
>>>b[1]=4
>>>a
[1,2,3]
count
计算指定的元素在列表中出现了多少次
extend
将多个值同时附加到列表末尾,可以使用一个列表扩展另一个列表
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>a.extend(b) #与拼接的区别是,拼接是返会一个全新的序列,extend是在原有的列表是增加,可以使用a=a+b,但是效率比extend低
>>>a
[1,2,3,4,5,6]
index
在列表中查找指定值第一次出现的索引
>>>knights=['w','a','t','a','e']
>>>knights.index('a')
1
insert
将对象插入列表
>>>knights.insert(3,'g') #也可以使用切片来插入,但是效率也不如insert
pop
从列表删除一个元素(无指定时默认为最后一个元素),并返回这个值
pop是唯一一个既修改列表又返回一个非none值的列表方法
pop可以用来实现栈的弹出,用append来压入
remove
用来删除第一个为指定值的元素
reverse
按相反方向修改列表中的元素
sort
用于对列表就地排序,意味着对原来的列表进行修改
若要获取排序后的副本,方法是使用sorted
>>>x=[4,6,2,1,7,9]
>>>y=sorted(x)
>>>x
[4,6,2,1,7,9]
>>>y
[1.2.4.6.7.9]
高级排序
sort接受两个可选函数:key,reverse
key可以设置为一个用与排序的函数,不会直接用这个函数来判断哪个元素大,而是用它来为每个元素创建键,然后使用键来对元素进行排序
>>>x=['aardvark','abalone','acme','add','aerate']
>>>x.sort(key=len)
>>>x
['add','acme','aerate','abalone','aardbark']
元组
>>>(1,2,3) #使用原括号括起即可表示元组,也可以不加圆括号
(1,2,3)
>>>(1,) #即使元组只有一个元素,元素后面也要加逗号
tuple的工作原理与list类似,将一个序列为参数,转化为元组