3.1.3. 列表

Python 中可以通过组合一些值得到多种 复合 数据类型。其中最常用的 列表 ,可以通过方括号括起、逗号分隔的一组值(元素)得到。一个 列表 可以包含不同类型的元素,但通常使用时各个元素类型相同:

  1. >>> squares = [1, 4, 9, 16, 25]
  2. >>> squares
  3. [1, 4, 9, 16, 25]

和字符串(以及各种内置的 sequence 类型)一样,列表也支持索引和切片:

  1. >>> squares[0] # indexing returns the item
  2. 1
  3. >>> squares[-1]
  4. 25
  5. >>> squares[-3:] # slicing returns a new list
  6. [9, 16, 25]

所有的切片操作都返回一个新列表,这个新列表包含所需要的元素。就是说,如下的切片会返回列表的一个新的(浅)拷贝:

  1. >>> squares[:]
  2. [1, 4, 9, 16, 25]

列表同样支持拼接操作:

  1. >>> squares + [36, 49, 64, 81, 100]
  2. [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

immutable 的字符串不同, 列表是一个 mutable 类型,就是说,它自己的内容可以改变:

  1. >>> cubes = [1, 8, 27, 65, 125] # something's wrong here
  2. >>> 4 ** 3 # the cube of 4 is 64, not 65!
  3. 64
  4. >>> cubes[3] = 64 # replace the wrong value
  5. >>> cubes
  6. [1, 8, 27, 64, 125]

你也可以在列表末尾通过 append() 方法 来添加新元素(我们将在后面介绍有关方法的详情):

  1. >>> cubes.append(216) # add the cube of 6
  2. >>> cubes.append(7 ** 3) # and the cube of 7
  3. >>> cubes
  4. [1, 8, 27, 64, 125, 216, 343]

给切片赋值也是可以的,这样甚至可以改变列表大小,或者把列表整个清空:

  1. >>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
  2. >>> letters
  3. ['a', 'b', 'c', 'd', 'e', 'f', 'g']
  4. >>> # replace some values
  5. >>> letters[2:5] = ['C', 'D', 'E']
  6. >>> letters
  7. ['a', 'b', 'C', 'D', 'E', 'f', 'g']
  8. >>> # now remove them
  9. >>> letters[2:5] = []
  10. >>> letters
  11. ['a', 'b', 'f', 'g']
  12. >>> # clear the list by replacing all the elements with an empty list
  13. >>> letters[:] = []
  14. >>> letters
  15. []

内置函数 len() 也可以作用到列表上:

  1. >>> letters = ['a', 'b', 'c', 'd']
  2. >>> len(letters)
  3. 4

也可以嵌套列表 (创建包含其他列表的列表), 比如说:

  1. >>> a = ['a', 'b', 'c']
  2. >>> n = [1, 2, 3]
  3. >>> x = [a, n]
  4. >>> x
  5. [['a', 'b', 'c'], [1, 2, 3]]
  6. >>> x[0]
  7. ['a', 'b', 'c']
  8. >>> x[0][1]
  9. 'b'