1.6 列表
列表是任意对象组成的序列。把值放入方括号中就可以创建列表,如下所示:
names = [ "Dave", "Mark", "Ann", "Phil" ]
列表使用从0开始的整数索引,使用索引运算符可以访问并修改列表中的项:
a = names[2] # 返回列表的第3项"Ann"
names[0] = "Jeff" # 将第1项改为"Jeff"
要将新项追加到列表末尾,可使用append()方法:
names.append("Paula")
要将一项插入到列表中,可使用insert()方法:
names.insert(2, "Thomas")
使用切片运算符可以提取一个子列表或对子列表重新赋值:
b = names[0:2] # 返回[ "Jeff", "Mark" ]
c = names[2:] # 返回[ "Thomas", "Ann", "Phil", "Paula" ]
names[1] = 'Jeff' # 将names中的第2项替换为'Jeff'
names[0:2] = ['Dave','Mark','Jeff'] # 将列表的头两项替换为右边的列表
使用加号(+)可以连接列表:
a = [1,2,3] + [4,5] # 结果是[1,2,3,4,5]
创建一个空列表有两种方式:
names = [] # 一个空列表
names = list() # 一个空列表
列表可以包含任意种类的Python对象,包括其他列表在内,如下例所示:
a = [1,"Dave",3.14, ["Mark", 7, 9, [100,101]], 10]
嵌套列表中包含的项需要使用多次索引操作才能访问到,例如:
a[1] # 返回 "Dave"
a[3][2] # 返回 9
a[3][3][1] # 返回 101
程序清单1-2中的程序展示了列表的一些高级特性,该程序会读取在命令行上指定的一个文件中的数值列表,然后输出其中的最大值和最小值。
程序清单1-2 列表的高级特性
import sys # 加载sys模块
if len(sys.argv) != 2: # 检查命令行参数的数量:
print "Please supply a filename"
raise SystemExit(1)
f = open(sys.argv[1]) # 命令行上的文件名
lines = f.readlines() # 将所有行读取到一个列表中
f.close()
# 将所有输入值从字符串转换为浮点数
fvalues = [float(line) for line in lines]
# 打印最小值和最大值
print "The minimum value is ", min(fvalues)
print "The maximum value is ", max(fvalues)
该程序的第一行使用import语句从Python库加载sys模块。加载该模块的目的是获得命令行参数。
open()函数使用了一个文件名,该文件名是以命令行选项的形式提供的并保存在列表sys.argv中。readline()方法将所有输入行读取到一个字符串列表中。
表达式[float(line) for line in line]通过对列表lines中的所有字符串进行循环,并对每个元素应用函数float(),从而构造一个新列表。这种功能特别强大的列表构造方法叫做列表推导(list comprehension)。因为你还可以使用for循环来读取文件中的行,所以可以将上面程序中转换值的代码简化为一条语句:
fvalues = [float(line) for line in open(sys.argv[1])]
将输入行转换成一个浮点数列表后,再使用内置函数min()和max()计算出最大值和最小值即可。