天天看点

Python_List对象内置方法详解目录前言软件环境列表List最后

<a href="#%E7%9B%AE%E5%BD%95">目录</a>

<a href="#%E5%89%8D%E8%A8%80">前言</a>

<a href="#%E8%BD%AF%E4%BB%B6%E7%8E%AF%E5%A2%83">软件环境</a>

<a href="#%E5%88%97%E8%A1%A8list">列表List</a>

<a href="#%E4%BF%AE%E6%94%B9%E5%88%97%E8%A1%A8%E7%9A%84%E5%85%83%E7%B4%A0">修改列表的元素</a>

<a href="#%E6%8F%92%E5%85%A5%E5%88%97%E8%A1%A8%E5%85%83%E7%B4%A0">插入列表元素</a>

<a href="#extend-%E5%B0%86%E5%BA%8F%E5%88%97%E4%B8%AD%E7%9A%84%E5%85%83%E7%B4%A0%E8%BF%AD%E4%BB%A3%E7%9A%84%E9%99%84%E5%8A%A0%E5%88%B0list%E4%B8%AD">extend 将序列中的元素迭代的附加到list中</a>

<a href="#insert-%E5%9C%A8%E6%8C%87%E5%AE%9A%E7%9A%84%E7%B4%A2%E5%BC%95%E5%8F%B7%E4%B8%AD%E6%8F%92%E5%85%A5%E4%B8%80%E4%B8%AA%E5%85%83%E7%B4%A0">insert 在指定的索引号中插入一个元素</a>

<a href="#%E5%88%A0%E9%99%A4%E5%88%97%E8%A1%A8%E5%85%83%E7%B4%A0">删除列表元素</a>

<a href="#del-%E5%88%A0%E9%99%A4list%E4%B8%AD%E7%9A%84%E5%85%83%E7%B4%A0">del 删除List中的元素</a>

<a href="#pop-%E5%BC%B9%E5%87%BAlist%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E5%85%83%E7%B4%A0">pop 弹出List中的一个元素</a>

<a href="#remove-%E5%88%A0%E9%99%A4list%E4%B8%AD%E4%B8%80%E4%B8%AA%E6%8C%87%E5%AE%9Avalue%E7%9A%84%E5%85%83%E7%B4%A0">remove 删除List中一个指定Value的元素</a>

<a href="#%E6%8E%92%E5%BA%8F%E5%88%97%E8%A1%A8%E5%85%83%E7%B4%A0">排序列表元素</a>

<a href="#sort-%E6%AD%A3%E5%90%91%E6%8E%92%E5%BA%8F">sort 正向排序</a>

<a href="#operator-module%E6%94%AF%E6%8C%81%E6%8E%92%E5%BA%8F">Operator Module支持排序</a>

<a href="#reverse-%E9%80%86%E5%90%91%E6%8E%92%E5%BA%8F">reverse 逆向排序</a>

<a href="#count-%E7%BB%9F%E8%AE%A1%E5%85%83%E7%B4%A0%E5%9C%A8list%E4%B8%AD%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0">count 统计元素在list中出现的次数</a>

<a href="#list%E7%9A%84%E6%B7%B1copy%E5%92%8C%E6%B5%85copy">List的深Copy和浅Copy</a>

<a href="#%E6%9C%80%E5%90%8E">最后</a>

在上一篇中介绍了Python的序列和String类型的内置方法,本篇继续学习作为序列类型成员之一的List类型的内置方法。

系统

UbuntuKylin 14.04

软件

Python 2.7.3

IPython 4.0.0

列表是一种容器,存放内存对象的引用。即是任意内存对象的有序集合,不同的类型对象可以存放在同一个列表中。通过索引来访问其中的元素。可以任意的嵌套、伸长、异构、为可变数据类型,支持原处修改列表内部元素的引用。

插入的元素也可以是序列等任意类型

L.extend(iterable) – extend list by appending elements from the iterable

注意:是将iterable中的元素迭代的添加到List中,成为List的元素,而不是将整个iterable成为List中的一个元素。这与append()方法是有本质的区别的。

extend():

append():

L.insert(index, object) – insert object before index

在指定的原index之前插入一个元素

可以插入任意类型对象,但只会插入一个元素,index后的元素依次后挪一位。

同时结合切片操作符。

注意:这中删除元素的方法只有列表类型适用

L.pop([index]) -&gt; item – remove and return item at index (default last).

Raises IndexError if list is empty or index is out of range.

将List中的一个指定index的元素弹出(默认为最后一个元素),并返回一个value,可以赋值给变量。当List为空或指定的索引超出List长度时,会触发一个indexError。

L.remove(value) – remove first occurrence of value.

Raises ValueError if the value is not present.

删除List中第一个指定的Value的元素,不会返回一个Value。与del()的使用方法不同,remove()是通过value来决定删除的元素,而不是通过index来决定。

L.sort(cmp=None, key=None, reverse=False) – stable sort *IN PLACE*;

cmp(x, y) -&gt; -1, 0, 1

List内建爱呢的sort()函数,跟序列类型的内建爱呢函数sorted()有着非常相似的地方。

一样拥有key()、cmp()函数和reverse缺省参数,用法也基本相同。但是两者之间还是有着本质的差别,如下:

1. L.sort()函数只支持List类型对象,而sorted()函数支持所有的iterable迭代器类型。

2. L.sort()会改变原始的List对象,返回值为None。而sotred()函数不会修改原始iterable,会返回一个新的List。

Operator模块中的itemgetter, attrgetter两个方法可以有效的支持L.sort()、sorted()两种排序方法。

itemgetter:

itemgetter(item, …) –&gt; itemgetter object

Return a callable object that fetches the given item(s) from its operand.

After f = itemgetter(2), the call f(r) returns r[2].

After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])

从操作数中获取一个由index索引指定的item,并返回一个可被调用的对象。

attrgetter:与itemgetter的用法类似,区别在于使用指定的value来指定要获取的attribute。

下面做一个比较:

sorted():

L.sort():

operator.itemgetter():

除此之外operator模块能够实现多级排序:

在以tuple_index=0作为关键字无法实现排序后,会自动的使用tuple_index=1作为关键字排序。

另一种多级排序的方法:

始终与当前顺序逆向,默认tuple_index=0为优先排序。

L.count(value) -&gt; integer – return number of occurrences of value

下面先看一个例子:

可以看出,对li1的操作会影响到li2。实际上 li1 = li2 语句只是将li1的引用对象Copy给了li2,而没有将li1的内存对象Copy给li2。这就是List类型的浅Copy,相对的就是深Copy。

进行List的深Copy的方法有下面两种:

方法一:将li1的内存对象Copy给li2,生成一个新的List对象。

比较两次赋值的区别:

方法二:使用copy.deepcopy() 函数

deepcopy(x, memo=None, _nil=[])

Deep copy operation on arbitrary Python objects.

深Copy方法deepcopy()只对可变类型有效,所以Tuple、String不能使用。

因为工作原因最近新开了Linux、和powershell主题的版块。希望可以做到即学即用,以博客来推动学习。但是Python仍然是我最喜欢的一种语言,他还有些非常多有意思的地方等待我们去发现。继续努力!:)

Jmilk