列表与元组的主要不同在于,列表是可以修改的,元组不可以。列表适用于需要中途添加元素的情形,元组适用于出于某种考虑禁止修改序列的情形。在需要处理一系列值时,序列很有用,在数据库中,你可能使用序列来表示人,其中第一个表示姓名,第二个表示年龄。用列表表示如下:
| 1 | user=['Andy',20] |
序列还可包含其他序列
user=['Andy',20]use=['john',21]database=[user,usr]database[['Andy', 20], ['john', 21]]data=['Aurora',user]data['Aurora', ['Andy', 20]] |
有几种操作使用于所有序列,包括索引、切片、相加、相乘和成员检查。另外还有一些内置函数,可用于确定序列的长度以及找出序列中最大和最小的元素。
索引:
序列中所有的元素都有编号-从0开始递增
| 1234 | set='Hello'set[0]'H'字符串就是由字符组成的序列,索引0指向第一个元素,这里为字母H,不同于其他一些语言,python没有表示字符的类型。因此一个字符就是只包含一个元素的字符串。 |
这称为索引,还可使用负索引来获取元素
| 12 | set[-1]'o' |
对于字符串字面量(以及其他序列字面量)可直接对其执行索引操作,无需先将其赋给变量,这与先赋给变量在对变量执行索引操作的效果一样。
| 12 | 'Hello'[1]'e' |
如果函数调用返回一个序列,可直接对其执行索引操作。例如,你只想获取用户输入的姓名第二位:
name=input('name: ')[2]name: johnname'h' |
切片:
使用索引来访问单个元素外,还可使用切片来访问特定范围内的元素,使用两个索引用冒号分隔:
tag='<a href="How long have you been studying python">python web site</a>'tag[9:30]'How long have you bee'tag[49:-4]'python web site' |
切片适用于提取序列一部分,其中的编号非常重要,第一个索引是包含第一个元素的编号,第二个索引是切片后前一位的元素编号(下标从0开始)
number=[1,2,3,4,5,6,7,8,9,10]number[3:6][4, 5, 6] |
两个索引来指定切片的边界,其中一个索引指定的元素包含在切片内,第二个索引指定的元素不包含在切片内。
简写:
# 如果切片结束与序列末尾,可省略第二个索引:number[-3:][8,9,10]# 如果切片始于序列开头,可省略第一个索引:number[:3][1,2,3]# 复制序列number[:][1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
步长:
执行切片操作时,显示或隐示地制定起点和终点,但通常省略另一个参数,即步长。在普通切片中,步长为1(从一个元素移动到下一个元素),切片包含起点和终点之间的所有元素。
| 1234 | number[0:10:1][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]number[0:10:2][1, 3, 5, 7, 9] |
也可以简写:
| 12 | number[::4][1, 5, 9] |
步长不能为0,但是可以是负数,这样获取元素的位置是从右向左。
| 12 | number[::-2][10, 8, 6, 4, 2] |
步长为正数时,它从起点移到终点,步长为负数时,它从终点移到起点。
序列相加:
[1,2,3]+[4,5,6][1, 2, 3, 4, 5, 6][1,2,3]+'world'Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> [1,2,3]+'world'TypeError: can only concatenate list (not "str") to list |
不能拼接序列与字符串,虽然他们都是序列,一般不能拼接不同类型的序列。
乘法:
'hello' * 2'hellohello'[2] * 3[2, 2, 2] |
如先定义序列但并不为其赋值可用
name=[None] * 5name[None, None, None, None, None] |
成员资格:
检查特定的值是否包含在序列中,使用in.满足条件返回true,否则返回false.
name='Andy''A' in nameTrue# 对于字符串来说只有它包含的字符才是其成员或元素。'p' in 'python'True |
长度、最小值、最大值
number=[100,20,80]len(number)3max(number)100min(number)20max(2,3,7)7 |
列表常用方法
#赋值x = [1,2,1]x[1]= 3x[1, 3, 1]# 删除元素x = [1,3,1]del x[1]x[1, 1]# 给切片赋值name=list('Perl')name['P', 'e', 'r', 'l']name[3:]=list('ar')name['P', 'e', 'r', 'a', 'r']# 还可以在不删除原有元素的情况下插入新元素name[1:1]=list('el')name['P', 'r', 'l', 'e', 'r', 'a', 'r']del name[1::2]name['P', 'l', 'r', 'r'] |
方法是与对象(列表、数、字符串等)联系紧密的函数。
# 在末尾追加元素:appendnumber.append(4)number[1, 2, 3, 4]# 清空列表:clearnumber.clear()number[]# 复制:copya = [1,2,3] b = ab[1]=4b[1, 4, 3]a[1, 4, 3] a = [1,4,3]b=a.copy()b[1]=5a[1, 4, 3]# 计数:count['to','be','or','not','to','be'].count('to')2x=[[1,2],1,2,[1,2,[2,1]]]x.count(1)1# 扩展追加exenda =[1,2,3]b= [4,5,6]a.extend(b)a[1, 2, 3, 4, 5, 6]b[4,5,6] a+b[1, 2, 3, 4, 5, 6, 4, 5, 6]a[1, 2, 3, 4, 5, 6]b[4, 5, 6] # 查找第一次在序列中出现的索引a =['to','be','or','not','to','be']a.index('be')1a[1]'be'# inster:插入number = [1,2,3,4,5]number.insert(2,8)number[1, 2, 8, 3, 4, 5]# pop删除末尾最后一个元素并返回删除元素,pop是唯一既修改列表又返回一个非none值的列表方法。number.pop()5number[1, 2, 8, 3, 4] number.insert(0,number.pop(0)) # 删除第一个指定值的元素a =['to','be','or','not','to','be']a.remove('to')a['be', 'or', 'not', 'to', 'be']# 倒序排列:reversenumber = [2,8,3,4]number.reverse()number[4, 3, 8, 2]# 对列表就地排序指对原表进行修改:sortnumber = [4,3,8,2]number.sort()number[2, 3, 4, 8] |
元组:不可修改的序列
元组的几种写法。
(1,2,3) 1,2,3 (2,) 2, |
3 * (20+2)663* (20+2,)(22, 22, 22)(22)与22完全等效,加上逗号,就能完全改变表达式的值 |
函数tuple的工作原理与list很像,它将一个序列作为参数,并将其转换为元组。如果参数是元组,就原封不动的返回。
tuple([1,2,3])(1,2,3)tuple('abc')('a','b','c')tuple((1,2,3))(1,2,3)x = 1,2,3x[1]2x[0:2](1,2) |
随时随地看视频