您的位置:首页 > 编程语言 > Python开发

Python 学习笔记(二) 列表和元组

2013-12-15 16:48 453 查看
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]


初始化一个长度为10的列表


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)
元祖的分片还是元组 就像列表的分片还是列表一样.

小结

序列

成员资格

方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: