Python 包含6种内建序列,列表和元组是其二.
2.1 列表和元组的主要区别:
列表可以修改,元组不能.
序列举例 :
>>>>edward = ['Edward Gumby',42]
同时,序列也可以包含其它序列:
>>> john = ['John Smith',50]
>>> database= [edward,john]
>>> database
[['Edward Gumby', 42], ['John Smith', 50]]
2.2 通用序列操作
所有序列都可以进行某些特定的操作,包括索引,分片,加,乘以及检查某个元素是否属于序列的成员等.
2.2.1 索引
>>> greeting='hello'
>>> greeting[0]
索引从后往前计数时,最后一个元素是-1 ,倒数第二个元素是-2..
2.2.2 分片
通过分片可以访问一定范围内的元素
>>> tag = '012345hello word54321'
>>> tag[6:16]
'hello word'
分片通过冒号相隔的两个索引来实现, 第一个索引是需要提取的第一个元素的编号, 后一个索引是剩下的不提取的第一个元素的编号.
当要取最后一个元素时,后面的索引值为最后一个元素的索引+1即可.
例如:
>>> numbers=[1,2,3,4,5,6,7,8,9,10]
>>> numbers[7:10]
[8, 9, 10]
这里10对应的第11个元素其实是不存在的.
从头末未开始计数:
>>> numbers[-3:-1]
[8, 9]
这里,第一个索引值必须在第二个索引值左边,否则返回为空
步长:
>>> numbers[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
如例子所示,如果步长大于1,则会跳过某些数字.
捷径: 每4个数字提取出一个出来
>>> numbers[::4]
[1, 5, 9]
2.2.3序列相加
很简单:
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'hello,'+'word'
'hello,word'
>>> [1,2,3] + 'word'
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
[1,2,3] + 'word'
TypeError: can only concatenate list (not "str") to list
直接 ' + ' 即可将序列连接 . 显然, 列表和字符串是不能相加的.
2.2.4 乘法
例子:
>>> 'python'*5
'pythonpythonpythonpythonpython'
>>> [23]*5
[23, 23, 23, 23, 23]
sequence = [None] * 10
2.2.5 成员资格
使用in 关键字检查一个值是否在序列中, 将返回一个布尔值.
>>> permissions ='rw'
>>> 'w' in permissions
True
2.2.6长度 最小值和最大值.
内建函数 len ,max ,min 返回序列中包含元素的个数,最大值和最小值
>>> len (numbers)
10
>>> max(numbers)
10
>>> min(numbers)
1
2.3 Python的苦力 :列表
2.3.1 list 函数
list 可以将序列转化为列表
实例:
>>> list('Hello')
['H', 'e', 'l', 'l', 'o']
2.3.2 基本的列表操作
1 改变列表: 元素赋值:
>>> x=[1,1,1]
>>> x[1]=2
>>> x
[1, 2, 1]
2 删除元素
使用del语句来实现
>>> names = ['a','b','c']
>>> del names[1]
>>> names
['a', 'c']
3 分片赋值
>>> name = list ('Perl')
>>> name
['P', 'e', 'r', 'l']
>>> name[2:] = list('ar')
>>> name
['P', 'e', 'a', 'r']
分片赋值时, 可以适用于原序列不等长的序列降分片替换:
>>> name = list ('Perl')
>>> name [1:]= 'yhton'
>>> name
['P', 'y', 'h', 't', 'o', 'n']
用来插入也是可以的:
>>> numbers = [1,5]
>>> numbers[1:1] = [2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
用来删除也是可以的
>>> numbers[1:4]=[]
>>> numbers
[1, 5]
2.3.3列表方法
1 append
用于在列表末尾追加新的对象
>>> lst = [1,2,3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
2 count
count 用于统计某个元素在列表中出现的次数
>>> x= [[1,2],1,2,[1,2]]
>>> x.count([1.2])
0
>>> x.count([1,2])
2
3 extend
在列表末尾一次性追加另一个序列中的多个值
>>> a= [1,2,3]
>>> b=[4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
虽然也可以使用a=a+b 这样的方法,不过效率上要低很多.
4 index
从列表中找出某个值的第一个匹配项的索引位置.
>>> knight = ['a','b','c','d']
>>> knight.index('b')
1
5 insert
>>> numbers= [1,2,3,4,5,6,7]
>>> numbers.insert(3,'four')
>>> numbers
[1, 2, 3, 'four', 4, 5, 6, 7]
6 pop
移除列表中一个元素(默认是最后一个),并返回该元素的值
>>> x= [1,2,3]
>>> x.pop()
3
>>> x.pop(0)
1
>>> x
[2]
7 remove
移除列表中某个值的第一个匹配项
>>> x=['a','b','c','d','c']
>>> x.remove('c')
>>> x
['a', 'b', 'd', 'c']
值得注意的是,remove是一个没有返回值的原位置改变方法
8 reverse
将列表中的元素反向存放
>>> x
['a', 'b', 'd', 'c']
>>> x.reverse()
>>> x
['c', 'd', 'b', 'a']
9 sort
用于在原位置对列表进行排序.
>>> x
['c', 'd', 'b', 'a']
>>> x.sort()
>>> x
['a', 'b', 'c', 'd']
如果想不改变 x ,得到x的排序序列, 那么则需要用 y 来保存原始x的副本,再对y进行sort
y = x[:]
y.sort();
调用x[:]是得到了包含x所有元素的分片
注意:
使用 y= x 这种方法是没用的, 他只是使 y ,和 x 指向同一个列表而已.
另一个获取已排序列表的方法:sorted
>>> x=[4,2,6,1,7,9]
>>> y= sorted(x)
>>> x
[4, 2, 6, 1, 7, 9]
>>> y
[1, 2, 4, 6, 7, 9]
10 高级排序
按特定的方式排序 . 将sort中加cmp函数, 这点与c++ 中的方法一样 ,以后再说.
2.4 元组 : 不可变序列
元组与列表一样,也是一种序列.唯一不同的是元组不能修改. 创建元组的方法很简单, 用逗号分隔了一些值,那么就自动创建了元组.
>>> 1,2,3
(1, 2, 3)
实现包含一个值的元组: 后面加个逗号
>>> 42,
(42,)
2.4.1 tuple 函数
tuple 函数与list 函数功能基本一样: 以一个序列为参数将其转换成元组.
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple('abc')
('a', 'b', 'c')
2.4.2 基本元祖操作
除了创建和访问元组外 ,也没有太多其他操作,可以参照其他类型的序列来实现
>>> x=1,2,3
>>> x[1]
2
>>> x[0:2]
(1, 2)
元祖的分片还是元组 就像列表的分片还是列表一样.
小结
序列
成员资格
方法