>>> x =[[1,2],1,1,[1,2,[1,2]]]
>>> x.count(1)
2
3.2.3 extend
extend方法可以在列表的末尾一次性追加另一个序列中的多个值。
注意:extend方法和连接操作(+)最主要的区别在于:extend方法修改了被扩展的序列,而连接操作会返回一个全新的列表。
3.2.4 index
index方法用于从列表中找出某个值第一次匹配项的索引位置:
复制代码 代码如下:
>>> knights = ['we','are','the','knights']
>>> knights.index('the')
2
>>> knights.index("hi")
ValueError:list.index(x):x not in list
当匹配项没有被找到时,会引发一个异常。
3.2.5 insert
insert方法用于将对象插入到列表中:
复制代码 代码如下:
>>> numbers = [1,2,3,6]
>>> numbers = insert(3,5)
>>> numbers
[1,2,3,5,6]
>>> numbers[3:3] = [4]
>>> numbers
[1,2,3,4,5,6]
上面最后一个例子中通过分片赋值实现插入,但是可读性不如insert。
3.2.6 pop
pop方法会移除列表中的一个元素,并且放回该元素的值,它是唯一一个既能修改列表又能返回元素值的列表方法:
复制代码 代码如下:
>>> x = [1,2,3]
>>> x.pop()
3
>>> x
[1,2]
3.2.7 remove
remove方法用于移除列表中某个值的第一个匹配项:
复制代码 代码如下:
>>> x = ['to','be','to']
>>> x.remove('to')
>>> x
['be','to']
>>> x.remove('kkk')
ValueError:list.remove(x):x not in list
可以看到只有第一次出现的值被移除了,而不在列表中的值是不会移除的。
3.2.8 reverse
reverse方法将列表中的元素反向存放:
复制代码 代码如下:
>>> x = [1,2,3]
>>> x.reverse()
>>> x
[3,2,1]
3.2.9 sort
sort方法用于在原位置对列表进行排序,意味着改变原来的列表,而不是简单地返回一个已排序的列表副本。
如果想要得到一个排序而不改变原来的数值,那就需要先赋值再排序:
复制代码 代码如下:
>>> x = [4,2,7,1]
>>> y = x[:]
>>> y.sort()
>>> x
[4,2,7,1]
>>>y
[1,2,4,7]
注意:上面的例子中赋值使用的是y=x[:],分片是一种很有效率的复制整个列表的方法。如果简单地把x赋值给y是没有的(y=x),因为这样做就让x和y指向同一个列表了。
另一种获取已排序列表副本的方法是使用sorted函数:
复制代码 代码如下:
>>> x = [4,5,3,7,2]
>>> y = sorted(x)
>>> x
[4,5,3,7,2]
>>> y
[2,3,4,5,7]
3.2.10 高级排序
如果希望元素能够按照特定的方式进行排序,那么可以通过compare(x,y)的形式自定义比较函数。内建cmp函数提供了比较函数的默认实现方式:
复制代码 代码如下:
>>> cmp(1,2)
-1
>>> cmp(2,1)
>>> cmp(1,1)
>>> numbers = [5,3,9,7]
>>> numbers.sort(cmp)
>>> numbers
[3,5,7,9]
sort方法有另外2个可选参数-key和reverse。要使用它们,那就要通过名字来指定。
复制代码 代码如下:
>>> x = ['a','abc','ab']
>>> x.sort(key=len)
>>> x
['a','ab','abc']
>>> y = [2,4,1,5]
>>> y.sort(reverse)
>>> y
[5,4,2,1]
4.元组:不可变序列
创建元组的语法很简单:如果你用逗号分隔了一些值,那么你就自动创建了元组。
复制代码 代码如下:
>>>1,2,3
(1,2,3)
>>>(1,2,3)
(1,2,3)
>>>()
()
>>>42,
(42,)
如上面最后一个例子,如果要实现一个包括一个值的元组,必须在数值后面加一个逗号。
4.1 tuple函数
tuple将一个序列作为参数并把它转换为元组,如果参数是元组,那么该参数就会被原样返回:
复制代码 代码如下:
>>> tuple([1,2,3])
(1,2,3)
>>> tuple('abc')
('a','b','c')
>>> tuple((1,2,3))
(1,2,3)
4.2 基本元组操作
元组其实并不复杂,除了创建元组和访问元组元素之外,也没有太多其他操作:
复制代码 代码如下:
>>>x = 1,2,3
>>>x[1]
2
>>> x[0:2]
(1,2)
元组的分片还是元组,就像列表的分片还是列表一样。
4.3 那么,意义何在
元组是不可替代的:
(1)元组可以在映射中当作键使用,而列表不行。
(2)元组作为很多内建函数和方法的返回值存在。