Python 列表
列表数据类型还有更多的方法。这里是列表对象的所有方法:
list.append(x)
添加一个元素到列表的末尾;相当于a[len(a):] = [x]。
list.extend(L)
将指定列表中的所有元素附加到另一个列表的末尾;相当于a[len(a):] = L。
list.insert(i, x)
在给定位置插入一个元素。第一个参数是插入的元素的索引,所以 a.insert(0, x) 在列表的最前面插入,a.insert(len(a), x) 相当于 a.append(x)。
list.remove(x)
删除列表中第一个值为 x 的元素。如果没有这样的元素将会报错。
list.pop([i])
删除列表中指定位置的元素并返回它。如果未指定索引,a.pop()将删除并返回列表中的最后一个元素。i为可选
list.index(x)
返回列表中第一个值为 x 的元素的索引。如果没有这样的元素将会报错。
list.count(x)
返回列表中 x 出现的次数。
list.sort(cmp=None, key=None, reverse=False)
原地排序列表中的元素(参数可以用来自定义排序方法,参考sorted()的更详细的解释)。
list.reverse()
原地反转列表中的元素。
>>> a = [66.25, 333, 333, 1, 1234.5] >>> print a.count(333), a.count(66.25), a.count('x') 2 1 0 >>> a.insert(2, -1) >>> a.append(333) >>> a [66.25, 333, -1, 333, 1, 1234.5, 333] >>> a.index(333) 1 >>> a.remove(333) >>> a [66.25, -1, 333, 1, 1234.5, 333] >>> a.reverse() >>> a [333, 1234.5, 1, 333, -1, 66.25] >>> a.sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5] >>> a.pop() 1234.5 >>> a [-1, 1, 66.25, 333, 333]
用列表作为栈,列表方法使得将List当作栈非常容易,最先进入的元素最后一个取出(后进先出)。使用append()将元素添加到栈顶。使用不带索引的pop()从栈顶取出元素。
也可以将列表当作队列使用,此时最先进入的元素第一个取出(先进先出);但是列表用作此目的效率不高。在列表的末尾添加和弹出元素非常快,但是在列表的开头插入或弹出元素却很慢 (因为所有的其他元素必须向后移一位)。如果要实现一个队列,可以使用collections.deque,它设计的目的就是在两端都能够快速添加和弹出元素。
在使用列表时有三个函数非常有用:filter()、map()和reduce()。
filter(function, sequence)返回的序列由function(item)结果为真的元素组成。如果sequence是一个字符串或元组,结果将是相同的类型;否则,结果将始终是一个列表。例如,若要计算一个不能被2和3整除的序列:
>>> def f(x): return x % 2 != 0 and x % 3 != 0 ... >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23]
map(function, sequence) 为序列中的每一个元素调用 function(item) 函数并返回结果的列表。例如,计算列表中所有元素的立方值:
>>> def cube(x): return x*x*x ... >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
reduce(function, sequence) 只返回一个值,它首先以序列的前两个元素调用函数 function,然后再以返回的结果和下一个元素继续调用,依此执行下去。例如,若要计算数字 1 到 10 的总和:
>>> def add(x,y): return x+y ... >>> reduce(add, range(1, 11)) 55
列表推导式提供了一个生成列表的简洁方法。应用程序通常会从一个序列的每个元素的操作结果生成新的列表,或者生成满足特定条件的元素的子序列。
>>> squares = [] >>> for x in range(10): ... squares.append(x**2) ... >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]我们可以用下面的方式得到同样的结果:
squares = [x**2 for x in range(10)]
squares = map(lambda x: x**2, range(10))
del语句
有个方法可以从列表中根据索引而不是值来删除一个元素:del语句。这不同于有返回值的pop()方法。del语句还可以用于从列表中删除切片或清除整个列表。
>>> a = [-1, 1, 66.25, 333, 333, 1234.5] >>> del a[0] >>> a [1, 66.25, 333, 333, 1234.5] >>> del a[2:4] >>> a [1, 66.25, 1234.5] >>> del a[:] >>> a []