列表和元组

1.序列概论

  • 列表可以修改,而元组不可以。

2.通用的序列操作

  • 适用于所有序列的操作有:索引、切片、相加、相乘和成员资格检查。

2.1索引

  • 序列中所有元素都有编号——从0开始递增,用编号来访问各个元素称为索引。
  • 可以用索引来获取元素。
  • -1是最后一个元素的位置
  • 代码清单2-1 索引操作实例

2.2切片

  • 切片用来访问特定范围内的元素
  • 提供两个索引来指定切片边界,第一个索引指定的元素包含在切片内,第二个索引指定的元素不包含在切片内
  • 若切片结束于序列末尾,可省略第二个索引。
  • 若切片开始于序列开头,可省略第一个索引。
  • 要复制整个序列,可将两个索引都省略。
  • 代码清单2-2 切片操作示例
  • 步长不可为0,否则无法向前移动,但可以为负数,即从右向左提前元素。
  • 步长为负数时,第一个索引必须比第二个索引大。

2.3序列相加

  • 可使用加法运算符来拼接序列
  • 不能拼接不同类型的序列

2.4乘法

  • 序列与数x相乘时,将重复这个序列x次来创建一个新序列
  • 没有在列表中添加任何内容可使用None
  • 代码清单2-3 序列(字符串)乘法运算示例

2.5成员资格

  • 要检查特定的值是否包含在序列中,可使用运算符in
  • in为布尔运算符。检查是否满足指定的条件,并返回相应的值:满足返回True,反之False.
  • 代码清单2-4 序列成员资格示例
  • 内置函数len、min、max
  • len()返回序列中中包含的元素个数。
  • min()和max()分别返回序列中最小的元素和最大的元素。

3.列表

3.1函数list

  • 将字符串转化为列表可使用函数list()
>>>list('Hello')
>['h','e','l','l','o']
  • 可将任何序列(而不仅仅是字符串)作为list的参数

3.2基本的列表操作

  • 给元素赋值:使用索引表示法给特定位置的元素赋值,如 x[1]=2
  • 删除元素:从列表中删除元素使用del语句,如 del names[2]
  • 给切片赋值:使用切片赋值,可将切片替换为长度与其不同的序列。如 name[1:]=list(‘ython’)
  • 使用切片赋值还可在不替换原有元素的情况下插入新元素,如 numbers[1:1]=[2,3,4]

3.3列表方法

  • append:将一个对象附加到列表末尾
>>>lst=[1,2,3]
>>>lst.append(4)
>>>lst
[1,2,3,4]
  • clear:就地清空列表的内容
>lst=[1,2,3]
>lst.clear()
>lst
[]
#类似于切片语句lst[:]=[]
  • copy:复制列表
#常规复制只是将另一个名称关联到列表
>a=[1,2,3]
>b=a
>b[1]=4
>a
[1,4,3]
#若想使a和b指向不同列表,就必须将b关联到a的副本
>a=[1,2,3]
>b=a.copy()
>b[1]=4
>a
[1,2,3]
#类似于a[:]或list(a),它们也都复制a
  • count:计算指定元素在列表中出现了多少次
>x=[[1,2],1,1,[2,1,[1,2]]]
>x.count(1)
2
>x.count([1,2])
1
  • extend:同时将多个值附加到列表末尾
>a=[1,2,3]
>b=[4,5,6]
>a.extend(b)
>a
[1,2,3,4,5,6]
#此方法将修改被扩展序列,并返回一个全新序列,与拼接不同
>a=[1,2,3]
>b=[4,5,6]
>a+b
[1,2,3,4,5,6]
>a
>[1,2,3]
  • index:在列表中查找指定值第一次出现的索引
>knights=['we','are','the','knights','who','say','ni']
>knights.index('who')
4
  • insert:用于将一个对象插入列表
>numbers=[1,2,3,5,6,7]
>numbers.insert(3,'four')
>numbers
[1,2,3,'four',5,6,7]
#同理也可使用切片赋值获得同等效果
  • pop:从列表中删除一个元素(默认为最后一个元素),并返回这一元素
>x=[1,2,3]
>x.pop()
3
>x
[1,2]
>x.pop(0)
1
>x
[2]
#pop是唯一既修改列表又返回一个非None值的列表方法
  • remove:用于删除第一个为指定值的元素
>x=['to','be','or','not','to','be']
>x.remove('be')
>x
['to','or','not','to','be']
#remove是就地修改且不返回值,不同于pop返回值
  • sort:对列表就地排序
>x=[4,6,2,1,7,9]
>x.sort()
>x
[1,2,4,6,7,9]
#sort修改x且不返回任何值,下述操作则为错误
>y=x.sort() #error
#y会包含NULL,需要用copy先将y关联到x副本,再对y排序

4.元组

  • 元组与列表的唯一差别在于元组是不能修改的
  • 要表示只包含一个值的元组,须在它后面加上逗号,如 (42,)
  • 对于元组而言逗号至关重要,只用圆括号括起不管用
>3*(40+2)
126
>3*(40+2,)
(42,42,42)
  • tuple:将一个序列作为参数,并将其转换为元组。若参数已经是元组,就原封不动地返回它。
>tuple([1,2,3])
(1,2,3)
>tuple('abc')
('a','b','c')
>tuple((1,2,4))
(1,2,3)
  • 元组的切片也是元组,就像列表的切片也是列表一样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值