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


Python中有四种特别常用的数据结构——列表,元组,字符串和字典。这里我们先介绍列表和元组。

列表和元组是Python内建的6种序列(sequence)种最常用的一种数据类型。所有Python的序列类型都有一些通用的操作:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此以外,Python还有计算序列的长度、找出最大元素和最小元素的内建函数。

一,序列的通用操作

下面我们以列表(用方括号括起来的一组数据)为例说明序列的一些通用操作。

1,索引

同许多编程语言一样,Python中序列的索引下标是从0开始的。而且,可以使用负数下标进行索引——从序列的右边的最后一个元素开始索引,最后一个元素的位置编号是-1。而且可以直接对字符串字面值使用索引。比如:

>>> greeting = 'Hello'
>>> greeting[0]
'H'
>>> greeting[-1]
'o'
>>> 'Hello'[1]
'e'

2,分片

使用索引可以对单个元素进行操作,而使用分片却可以访问一定范围内的元素。分片通过冒号相隔的两个索引来实现,且第一个索引的元素是包含在分片内的,而第二个则不包含在分片内。分片时也可以指定步长,默认值步长为1。下面通过一些列子来说明其他关于分片的特性:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[3:6]
[4, 5, 6]
>>> numbers[0:1]
[1]
>>> numbers[-3:-1]
[8, 9]
>>> numbers[-3:0]  #如果分片中最左边的索引比它右边的晚出现在序列中,结果就是一个空的序列
[]
>>> numbers[-3:]  #如果分片所得部分包括序列结尾的元素,那么置空最后一个索引即可
[8, 9, 10]
>>> numbers[:3]
[1, 2, 3]
>>> numbers[:]  #如果要复制整个序列,可以将两个索引都置空
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:10:1]  #显式的设置步长
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:10:2]  #设置步长为2
[1, 3, 5, 7, 9]
>>> numbers[0:10:-2]  #步长可以为正数、负数,但不能为0。为负数时,表示从右向左提取元素,所以必须让开始点大于结束点
[]
>>> numbers[10:0:-2]
[10, 8, 6, 4, 2]
>>> numbers[::-3]
[10, 7, 4, 1]

3,序列相加

可以通过加号进行序列的连接操作,但必须时两种相同类型的序列才能进行连接操作。如下例:

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello' + 'World'
'HelloWorld'
>>> [1, 2, 3] + 'World'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

4,乘法

用数字n乘一个序列会生成新的序列,而在新的序列之中,原来的序列将被重复n次。

>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>> [42] * 10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
>>> sequence = [None] * 10  #None是Python的一个内建值,表示什么都没有,可以用于初始化列表。
>>> sequence
[None, None, None, None, None, None, None, None, None, None]

5,成员资格

为了检查一个值是否存在于序列之中,可以使用in操作符。返回值为bool值True或False。

>>> 'r' in permissions
True
>>> 'x' in permissions
False

6,长度、最小值和最大值

内建函数len、min和max分别用于计算序列的长度、最小值和最大值。

>>> members = [100, 34, 678]
>>> len(members)
3
>>> min(members)
34
>>> max(members)
678
>>> min(9, 4, 7, 2)
2

以上便是序列的一些通用操作,适用于Python内建的6中序列。下面我们学习一下最常用的一种序列:列表。

二,列表

列表和元组以及字符串相比,最大的特别时列表是可变的(mutable)——列表的内容可以改变,除此以外,列表还有许多有用的专门的方法。

1,list函数

list函数用于根据字符串创建列表。

>>> list('Hello')
['H', 'e', 'l', 'l', 'o']

其实,list不光适用于字符串,还适用于所有类型的序列。

2,基本的列表操作

列表除了适用前面介绍的所有序列的标准操作外,还有一些其他的操作:

(1)改变列表:元素赋值

>>> x = [1, 1, 1]
>>> x[1] = 2
>>> x
[1, 2, 1]

(2)删除元素

从列表中删除元素,使用del语句来实现。

>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Dee-Dee', 'Earl']

(3)分片赋值

分片是一个非常强大的特性,分片赋值操作则更加显现它的强大。合理使用分片赋值往往能实现很多赋值之外的操作。具体见下面的例子:

>>> name = list('Perl')
>>> name
['P', 'e', 'r', 'l']
>>> name[2:] = list('ar')
>>> name
['P', 'e', 'a', 'r']
>>> name = list('Perl')
>>> name[1:] = list('ython')  #使用分片赋值时,可以使用与原序列不等长的序列将分片替换
>>> name
['P', 'y', 't', 'h', 'o', 'n']
>>> numbers = [1, 5]
>>> numbers[1:1] = [2, 3, 4]  #分片赋值可以在不需要替换任何原有元素的情况下插入新的元素
>>> numbers
[1, 2, 3, 4, 5]
>>> numbers[1:4] = []  #替换一个空的序列,达到del的操作
>>> numbers
[1, 5]

3,列表方法

(1)append——用于在列表末尾追加新的对象

>>> lst = [1, 2, 3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]

(2)count——用于统计某个元素在列表中出现的次数

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
2
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> x
[[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> x.count(1)
2
>>> x.count([1, 2])

(3)extend——用于在列表末尾追加另一个序列中的多个值

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

(4)index——用于从列表中找出某个值与第一个匹配项的索引位置

>>> knights = ['we', 'are', 'the', 'knights', 'who', 'say', 'ni']
>>> knights.index('who')
4
>>> knights.index('herring')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'herring' is not in list
>>> knights[4]
'who'

(5)insert——用于将对象插入到列表中

>>> numbers = [1, 2, 3, 5, 6, 7]
>>> numbers.insert(3, 'four')
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]

(6)pop——移除列表中的一个元素(默认是最后一个),并且返回该元素的值

>>> x = [1, 2, 3]
>>> x
[1, 2, 3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop()
2
>>> x
[1]

(7)remove——用于移除列表中某个值的第一个匹配项

>>> x = ['to', 'be', 'or', 'not', 'to', 'be']
>>> x
['to', 'be', 'or', 'not', 'to', 'be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']
>>> x.remove('bee')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>>

(8)reverse——将列表中的元素反向存放

>>> x = [1, 2, 3]
>>> x
[1, 2, 3]
>>> x.reverse()
>>> x
[3, 2, 1]

(9)sort——用于在原位置对列表进行排序

>>> x = [4, 6, 2, 1, 7, 9]
>>> x.sort()
>>> x
[1, 2, 4, 6, 7, 9]

列表我们就介绍到这里,下面我们介绍另外一种非常常见的序列:元组。

三,元组

元组与列表一样,也是一种序列。唯一的不同是元组不能修改。创建元组的语法很简单:如果用逗号分隔了一些值,就会自动创建元组。注意:逗号在元组里面是必须的,即使只有一个值。

>>> 1, 2, 3
(1, 2, 3)
>>> (1, 2, 3)
(1, 2, 3)
>>> ()  #空元组
()
>>> 42  #不是元组
42
>>> 42,  #只有一个值的元组
(42,)
>>> (42)  #不是元组
42
>>> (42,)
(42,)
>>> 3 * (40+2)  #普通乘法计算
126
>>> 3 * (40+2,)  #元组乘法
(42, 42, 42)

1,tuple函数

该函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转换为元组。如果参数就是元组,那么该参数就会被原样返回:

>>> tuple([1, 2, 3])
(1, 2, 3)
>>> tuple('abc')
('a', 'b', 'c')
>>> tuple((1, 2, 3))
(1, 2, 3)

2,元组的基本操作

元组因为不可改变,所以其操作除了创建和访问之外,没有太多的操作。

3,元组的意义

元组其实就是一个不可变的序列,很多情况下,元组都是可以被列表替代的,但除了下面两个方面:

(1)元组可以再映射(和集合的成员)中当键使用——而列表不可以。

(2)元组可以作为很多内建函数和方法的返回值。


添加新评论

选择表情 captcha

友情提醒:不填或错填验证码会引起页面刷新,导致已填的评论内容丢失。

|