6 列表List

列表是Python里最为常见、常使用的一种集合类,前述集合一章里给出了集合的定义和意图,即一堆数据用特定的符号整合起来视为一个整体,Python的列表List所使用的特殊集合符号为方括号,用逗号(,)间隔每个元素(元素类型可以不同)。列表是有序且可修改的集合类型。本章将围绕列表的基本概念、创建、使用展开,以及和列表相关的函数。

6.1 创建列表

列表有几个基本特征,第一是用方括号括起来、用逗号间隔;第二是列表里的元素类型可以相同或不同;第三列表可变可修改,长度可变内容可变。

创建或声明一个列表,(1)可以依据列表的定义用方括号括起来、用逗号间隔的形式创建,例如下边的a和b这两个列表。

a = [1, 2, 3]
print a
b = [12, 13.5, 'h']
print b

程序执行结果如下:

[1, 2, 3]
[12, 13.5, 'h']

从程序的执行结果可以得到验证列表内的各个元素的类型可以不相同。

(2)也可以通过list()函数将某些数据类型转化为列表。

s = "hello"
a = list(s)
print a

程序执行结果如下:

['h', 'e', 'l', 'l', 'o']

这个列表里的每个元素都是字符。

6.2 列表元素的访问

列表是有序的,每个元素都有一个位置坐标用index表示,在Python可以通过index访问列表的某位置上的数据值,当然也可修改该位置上的数据值。

6.2.1 通过index访问列表某元素

访问某位置数据的语法格式

列表名[index]

假设列表的元素个数(即列表的长度)为n,那么列表各个元素的位置index从左向右(正向)依次为0、1、2....、n-1。从右向左(负方向)依次为-1、-2、... -n。

下面以基于“python”字符串构建出的列表为例

s = "python"
print s
a = list(s)
print a

程序的执行结果为:

python
['p', 'y', 't', 'h', 'o', 'n']

s为字符串"python",而a为列表。a里的各个元素的index位置信息如下图所示。

fig1

对于列表a里的元素't'的正向坐标为2,负向坐标为-4。

s = "python"
print s
a = list(s)
print a
print a[2], a[-4]

程序的执行结果如下所示:

python
['p', 'y', 't', 'h', 'o', 'n']
t t

修改某位置的数据的语法格式

列表名[index] = 新值

举例:将字符'p'改为大写的'P'。

s = "python"
a = list(s)
print a[0],a[1]
a[0] = 'P'
print a[0],a[1]

程序的执行结果

python
['p', 'y', 't', 'h', 'o', 'n']
t t
p y
P y

由此可见,可以通过index访问或修改列表的某位置上的元素值。

6.2.2 遍历列表的各个元素值

如果想遍历整个列表,这里需要借助于循环体,可使用while或for循环体,有关for以后再讲,这里用while,因为之前有介绍过while循环体。

while循环体基本结构

循环体条件的变量初始化
while 条件:
    语句1
    语句2
    ....
    循环体变量的修正
else:
   语句a
   ....

举例:通过while循环体结构打印1~100。

#coding:utf-8

# while条件表达式涉及的变量初始化
i = 1 
# i <= 100为print i和 i = i + 1重复执行的条件
while i <= 100:  
    #while里可重复执行的语句
    print i      
    #修正循环体变量i的值,使得i <= 100最终变为Fasle而终止while循环
    i = i + 1      

在回顾了while的基本使用以后,可以利用while和列表的index来遍历列表的各个元素值了。

s = "python"
a = list(s)
index = 0
while index < len(a):
    print index, a[index]
    index = index + 1

程序的执行结果:

0 p
1 y
2 t
3 h
4 o
5 n

这里使用了len函数,是Python内建(自带)函数,可以测集合数据类型的长度(个数)值。

思考: 如果基于负向坐标正向打印列表a的各元素值?