python教程(二)·数据结构初探

这一节,我来简单讲讲python自带的数据结构。

列表(list)

列表是常用的python数据结构,类似于C语言的数组,用来存储多个元素,与之不同的是,C语言的数组中的元素的类型是相同的,而列表可以是不同类型的元素。

创建一个列表可以用一对方括号[]扩起的用逗号,分隔的值(元素)来表示:

>>> list1 = ['a', 'b', 123, 1.2]

我们可以打印这个列表:

>>> print(list1)
['a', 'b', 123, 1.2]

访问列表中的元素可以用列表名[索引]的方式,就像是操作一个变量一样。例如:

>>> print(list1[0]) # 输出第一个元素
a
>>> print(list1[1]) # 输出第二个元素
b
>>> list1[0] = 123 # 为第一个元素赋值
>>> print(list1[2] + list1[3]) # 用元素运算
124.2
>>> 

注意:在计算机中,索引一般是从0开始的,也就是说第一个元素的索引是0,依次类推。“索引” 还有另一种称呼——“偏移量”,一个元素的偏移量就是该元素相对于首元素位置的偏移,如第2个元素相对于首元素的偏移为1,第3个元素的偏移量为2……因为第1个元素相对于第1个元素的偏移量显然0,所以“偏移量”这个称呼更有利于记住首元素是0号元素,所以作者更倾向于这个称呼,读者请随意。

访问列表中的元素要注意索引(偏移量)是否越界,比如上面4个元素的列表,如果访问第5个元素将会报错

>>> print(list1[4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 

上面英文的大致意思是:列表的索引超出范围,刚刚创建的列表只有4个元素,不存在第5元素,当然会报错了。

我们可以创建一个空列表:

>>>list1 = list() # 或者用 list1 = []

可以添加元素

>>> list1 = list()
>>> list1
[]
>>> list1.append('hello') # 添加元素至列表尾部
>>> list1.append(123)
>>> list1.append(['a', 1]) # 嵌套一个列表
>>> list1
['hello', 123, ['a', 1]]
>>> 

还可以删除元素:

>>> list1
['hello', 123, ['a', 1]]
>>> del list1[2]
>>> list1
['hello', 123]
>>> list1.remove('hello')
>>> list1
[123]
>>> 

我们可以用下一节要讲到的for循环语句来遍历列表:

list1 = [ 'hello', 123, 456.0 ]
# 循环将列表中的元素赋值给变量e
for e in list1:
    print(e) 

输出如下:

hello
123
456.0

元组(tuple)

元组的用法和列表类似,列表可以改变,如赋值、添加元素、删除元素等,但是元组不可以改变,所以也就不能进行赋值、添加、删除等操作。

元组的用法如下:

>>> tuple1 = (123, 'a', 'b')
>>> tuple1
(123, 'a', 'b')
>>> tuple1 = 123,456,'hello'
>>> tuple1
(123, 456, 'hello')
>>> print(tuple1[1])
456
>>> 

上面的例子中表明圆括号()不是必要的,其实逗号,才是元组所用的语法符号,但是创建一个空元组的时候用一对圆括号()而不是一个逗号,,代码如下:

>>> tuple1 = , # 错误
  File "<stdin>", line 1
    tuple1 = , # 错误
             ^
SyntaxError: invalid syntax
>>> tuple1 = () # 正确
>>> tuple1
()
>>> tuple1 = tuple() # 也可以这样创建空元组

之前将多个变量同时赋值时,有一句a, b, c = 1, 2, 'hello',这其实是把一个元组1, 2, 'hello赋值给三个变量a, b, c,像这样把一个元组赋值给多个变量的操作称为 “解包”,列表也是可以进行解包的^_^,元组解包操作代码如下:

>>> tuple1
(123, 456, 'hello')
>>> a, b, c = tuple1
>>> a
123
>>> b
456
>>> c
'hello'
>>> 

元组同样可以用for语句来遍历:

tuple1 = ( 'hello', 123, 456.0 )
for e in tuple1:
    print(e) 

输出:

hello
123
456.0

字典(dict)

列表按索引访问元素,索引只能是整数,而有时候我们需要一种更方便的方式操作元素,如:电话簿按照姓名查找电话号码,字典按照单词查找意思。像这样用不是整数的“索引”来访问元素的数据结构叫做字典,在C语言中也叫“关联数组”,字典的“索引”称为 “键”“关键字”,元素称为 “值”“键值”,字典中的每对键和值称为 “项”

创建一个字典的方法是,用一对花括号{}扩起一系列用逗号分隔的键值对(项),其中键值对的表示方法是键:值,即{ 键1:值1, 键2:值2, 键3:值3},代码如下:

>>> dict1 = {'hello':'你好', 'python':'一门计算机语言'}
>>> dict1
{'hello': '你好', 'python': '一门计算机语言'}
>>> dict2 = dict(hello='你好', python='一门计算机语言') # 也可以这样
>>> dict2
{'hello': '你好', 'python': '一门计算机语言'}
>>> 

一些简单的操作:

>>> dict1['hello']
'你好'
>>> dict1['python']
'一门计算机语言'
>>> dict1['abc'] = 123 # 创建一个项
>>> dict1
{'hello': '你好', 'python': '一门计算机语言', 'abc': 123}
>>> del dict1['hello'] # 删除键为'hello'的项
>>> dict1
{'python': '一门计算机语言', 'abc': 123}
>>> dict1 = {} # 空字典, 或者用 dict1 = dict()
>>> dict1
{}
>>> 

也可用for语句遍历字典,但是for语句遍历的是字典的键,得到了键自然就可以得到值:

dict1 = {'hello':'你好', 'python':'一门计算机语言'}
for k in dict1:
    print(k,' =>', dict1[k])

输出如下:

hello  => 你好
python  => 一门计算机语言

本节只是简单了解python中常用的数据结构,不作深入探究,同时引出循环语句,接下来详细介绍编程中十分重要的语法——循环语句……