一、列表是什么

列表 由一系列按特定顺序排列的元素组成。
在Python中,用方括号 [] 来表示列表,并用逗号来分隔其中的元素。

列表简单实例:

  1. >>> names = ['yanfei','xiaoming','xiaohong','laowang']
  2. >>> print(names)
  3. ['yanfei','xiaoming','xiaohong','laowang']

让Python将列表打印出来,Python将打印列表的内部表示,包括方括号。

1.1 访问列表元素

列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。
要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。

如下面代码提取列表的第一个元素:

  1. >>> names = ['yanfei','xiaoming','xiaohong','laowang']
  2. >>> print(names[0])
  3. yanfei

请求获取列表元素时,Python只返回该元素,而不包括方括号和引号。
还可以使用字符串方法title() 让元素’yanfei’ 的格式更整洁:

  1. >>> names = ['yanfei','xiaoming','xiaohong','laowang']
  2. >>> print(names[0].title())
  3. Yanfei

1.2 索引从0而不是1开始

在Python中,第一个列表元素的索引为0,而不是1。
第二个列表元素的索引为1。根据这种简单的计数方式,要访问列表的任何元素,都可将其位置减1,并将结果作为索引。

如下,访问第三个列表元素使用索引2,访问第四个列表元素使用索引3:

  1. >>> names = ['yanfei','xiaoming','xiaohong','laowang']
  2. >>> print(names[2])
  3. xiaohong
  4. >>> print(names[3])
  5. laowang

Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1 ,可让Python返回最后一个列表元素:

  1. >>> names = ['yanfei','xiaoming','xiaohong','laowang']
  2. >>> print(names[-1])
  3. laowang

这种约定也适用于其他负数索引,例如,索引-2 返回倒数第 二个列表元素,索引-3 返回倒数第三个列表元素,以此类推。

1.3 使用列表中的各个值

可像使用其他变量一样使用列表中的各个值。

如下,从列表中提取第一个元素,定义到新变量中并输出:

  1. >>> names = ['yanfei','xiaoming','xiaohong','laowang']
  2. >>> message = "My name is " + names[0] + "!"
  3. >>> print(message)
  4. My name is yanfei!

二、修改、添加和删除元素

2.1 修改列表元素

修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。

  1. >>> names = ['yanfei','xiaoming','xiaohong','laowang']
  2. >>> print(names[0])
  3. yanfei
  4. >>> names[0] = 'wyf'
  5. >>> print(names[0])
  6. wyf

2.2 在列表中添加元素

2.2.1 在列表末尾添加元素

使用方法append()在列表末尾添加元素

如下,方法append() 将元素’wyf’ 添加到了列表末尾,而不影响列表中的其他所有元素:

  1. >>> print(names)
  2. ['yanfei', 'xiaoming', 'xiaohong', 'laowang']
  3. >>> names.append('wyf')
  4. >>> print(names)
  5. ['yanfei', 'xiaoming', 'xiaohong', 'laowang', 'wyf']

方法append() 让动态地创建列表易如反掌,例如,可以先创建一个空列表,再使用一系列的append() 语句添加元素:

  1. >>> names = []
  2. >>> names.append('wyf')
  3. >>> names.append('xiaoming')
  4. >>> names.append('laowang')
  5. >>> print(names)
  6. ['wyf', 'xiaoming', 'laowang']

2.2.2 在列表中插入元素

使用方法insert() 可在列表的任何位置添加新元素。

插入元素需要指定新元素的索引和值:

  1. >>> names = ['yanfei','xiaoming','xiaohong']
  2. >>> names.insert(0,'wyf')
  3. >>> print(names)
  4. ['wyf', 'yanfei', 'xiaoming', 'xiaohong']

在这个示例中,值’wyf’ 被插入到了列表开头;方法insert() 在索引0处添加空间,并将值’wyf’ 存储到这个地方。这种操作将列表中既有的每个元素都右移一个位置。

2.3 从列表中删除元素

2.3.1 使用del 语句删除元素

如果知道要删除的元素在列表中的位置,可使用del 语句。

如下,使用del语句删除了names列表中的第一个元素’yanfei’:

  1. >>> names = ['yanfei','xiaoming','xiaohong']
  2. >>> print(names)
  3. ['yanfei', 'xiaoming', 'xiaohong']
  4. >>> del names[0]
  5. >>> print(names)
  6. ['xiaoming', 'xiaohong']

使用del 可删除任何位置处的列表元素,条件是知道其索引。

2.3.2 使用方法pop() 删除元素

方法pop() 可删除列表末尾的元素,并让你能够接着使用它。

如下,先从列表弹出一个值,然后存储到一个变量中,最后打印这个变量,证明我们依然能够访问被删除的值

  1. >>> names = ['yanfei','xiaoming','xiaohong']
  2. >>> print(names)
  3. ['yanfei', 'xiaoming', 'xiaohong']
  4. >>> poped_names = names.pop()
  5. >>> print(names)
  6. ['yanfei', 'xiaoming']
  7. >>> print(poped_names)
  8. xiaohong

2.3.3 根据值删除元素

只知道要删除的元素的值,可使用方法remove() 。

如下,从names列表中删除元素’xiaohong’:

  1. >>> names = ['yanfei','xiaoming','xiaohong']
  2. >>> print(names)
  3. ['yanfei', 'xiaoming', 'xiaohong']
  4. >>> names.remove('xiaoming')
  5. >>> print(names)
  6. ['yanfei', 'xiaohong']

使用remove() 从列表中删除元素时,也可接着使用它的值。
如下:先将要删除的值存储在变量中,再使用这个变量告诉Python从列表中删除那个值;最后验证删除值’yanfei’后,它还被存储在变量中。

  1. >>> names = ['yanfei','xiaoming','xiaohong']
  2. >>> my_name = 'yanfei'
  3. >>> names.remove(my_name)
  4. >>> print(my_name)
  5. yanfei
  6. >>> print("My name is : " + my_name.title() + ".")
  7. My name is : Yanfei.

三、组织列表、

3.1 使用方法sort() 对列表进行永久性排序

Python方法sort() 让你能够较为轻松地对列表进行排序。
假设有一个汽车列表,并要让其中的汽车按字母顺序排列。
为简化这项任务,我们假设该列表中的所有值都是小写的。

  1. >>> cars = ['bmw', 'audi', 'toyota', 'subaru']
  2. >>> cars.sort()
  3. >>> print(cars)
  4. ['audi', 'bmw', 'subaru', 'toyota']

按与字母顺序相反的顺序排列列表元素,需向sort() 方法传递参数reverse=True

  1. >>> cars = ['bmw', 'audi', 'toyota', 'subaru']
  2. >>> cars.sort(reverse=True)
  3. >>> print(cars)
  4. ['toyota', 'subaru', 'bmw', 'audi']

3.2 使用函数sorted() 对列表进行临时排序

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted() 。
函数sorted() 能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。

  1. >>> cars = ['bmw', 'audi', 'toyota', 'subaru']
  2. >>> print(cars)
  3. ['bmw', 'audi', 'toyota', 'subaru']
  4. >>> print(sorted(cars))
  5. ['audi', 'bmw', 'subaru', 'toyota']
  6. >>> print(cars)
  7. ['bmw', 'audi', 'toyota', 'subaru']

调用函数sorted() 后,列表元素的排列顺序并没有变。

如果你要按与字母顺序相反的顺序显示列表,也可向函数sorted() 传递参数reverse=True

  1. >>> cars = ['bmw', 'audi', 'toyota', 'subaru']
  2. >>> print(sorted(cars,reverse=True))
  3. ['toyota', 'subaru', 'bmw', 'audi']
  4. >>> print(cars)
  5. ['bmw', 'audi', 'toyota', 'subaru']

3.3 倒着打印列表

要反转列表元素的排列顺序,可使用方法reverse() 。
reverse() 不是指按与字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序:

  1. >>> cars = ['bmw', 'audi', 'toyota', 'subaru']
  2. >>> print(cars)
  3. ['bmw', 'audi', 'toyota', 'subaru']
  4. >>> cars.reverse()
  5. >>> print(cars)
  6. ['subaru', 'toyota', 'audi', 'bmw']

方法reverse() 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse() 即可。

3.4 确定列表的长度

使用函数len() 可快速获悉列表的长度。

  1. >>> cars = ['bmw', 'audi', 'toyota', 'subaru']
  2. >>> len(cars)
  3. 4