列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list1 = ['physics', 'chemistry', 1997, 2000]

也可以用列表推导的方式创建列表:

>>> symbols = 'abcdef'
>>> codes = [ord(symbol) for symbol in symbols]
>>> codes
[97, 98, 99, 100, 101, 102]

与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等 

访问列表中的值

使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示: 

#!/usr/bin/python
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]
以上实例输出结果:
list1[0]: physics list2[1:5]: [2, 3, 4, 5]

更新列表

你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示: 

#!/usr/bin/python
# -*- coding: UTF-8 -*-
list = [] ## 空列表
list.append('Google') ## 使用 append() 添加元素
list.append('Runoob')
print list

 删除列表元素

可以使用 del 语句来删除列表的元素,如下实例:

#!/usr/bin/python
list1 = ['physics', 'chemistry', 1997, 2000]
print list1
del list1[2]
print "After deleting value at index 2 : "
print list1
 
以上实例输出结果:
['physics', 'chemistry', 1997, 2000] After deleting value at index 2 : ['physics', 'chemistry', 2000]

列表分片赋值 

多个列表元素赋值:

>>> name=list('perl')
>>> name
['p', 'e', 'r', 'l']
>>> name[2:]=list('ar')
>>> name
['p', 'e', 'a', 'r']

用与原序列不等长的序列将分片替换:

>>> name=list('perl')
>>> name[1:]=list('ython')
>>> name
['p', 'y', 't', 'h', 'o', 'n']

在不需要替换任何原有元素的情况下插入新的元素:

>>> numbers=[1,5]
>>> numbers[1:1]=[2,3,4]
>>> numbers
[1, 2, 3, 4, 5]

通过分片赋值来删除元素:

>>> numbers
[1, 2, 3, 4, 5]
>>> numbers[1:4]=[]
>>> numbers
[1, 5]

Python列表脚本操作符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

如下所示:

Python 表达式

结果

描述

len([1, 2, 3])

3

长度

[1, 2, 3] + [4, 5, 6]

[1, 2, 3, 4, 5, 6]

组合

['Hi!'] * 4

['Hi!', 'Hi!', 'Hi!', 'Hi!']

重复

3 in [1, 2, 3]

True

元素是否存在于列表中

for x in [1, 2, 3]: print x,

1 2 3

迭代

Python列表截取

Python 的列表截取实例如下:

>>>L = ['Google', 'Runoob', 'Taobao']
>>> L[2]
'Taobao'
>>> L[-2]
'Runoob'
>>> L[1:]
['Runoob', 'Taobao']
>>>

Python列表函数&方法

Python包含以下函数:

序号

函数

1

cmp(list1, list2)

比较两个列表的元素

2

len(list)

列表元素个数

3

max(list)

返回列表元素最大值

4

min(list)

返回列表元素最小值

5

list(seq)

将元组转换为列表

Python包含以下方法:

序号

方法

1

list.append(obj)

在列表末尾添加新的对象

2

list.count(obj)

统计某个元素在列表中出现的次数

3

list.extend(seq)

在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

4

list.index(obj)

从列表中找出某个值第一个匹配项的索引位置

5

list.insert(index, obj)

将对象插入列表

6

list.pop(obj=list[-1])

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

7

list.remove(obj)

移除列表中某个值的第一个匹配项

8

list.reverse()

反向列表中元素

9

list.sort([func])

对原列表进行排序

  *************************说明************************** 

1.extend方法和连接操作(+)的区别:

extend扩展原有的列表:

>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

连接操作则返回一个全新的列表,原有列表没有变化:

>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a+b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]

假如进行如下的操作:

a=a+b

那么连接操作的效率比extend低 

2.用pop方法实现栈(后进先出,LIFO)

append()+pop()
>>> x=[1,2,3]
>>> x.append(x.pop())
>>> x
[1, 2, 3]

 3.实现先进先出队列(FIFO)

append() + pop(0) 
insert(0,...)+pop()

4.需要对一个序列进行反向迭代,可以使用reversed函数,该函数返回一个迭代器对象;而且可以用list函数把返回的对象转换成列表

>>> x=[1,2,3]
>>> list(reversed(x))
[3, 2, 1]

5.sorted函数:获取已排序的列表副本,不改变原列表

>>> x=[3,2,6,5]
>>> y=sorted(x)
>>> y
[2, 3, 5, 6]
>>> x
[3, 2, 6, 5]

6.实现高级排序 ----改变sort函数的参数 cmp key reverse

1)自定义比较函数cmp

如果希望元素可以按照特定的方式进行排序,而不是sort函数的默认方式,可以通过compare(x,y)的形式自定义比较函数;定义好该函数后,就可以提供给sort方法作为参数了。

内建函数cmp提供了比较函数的默认实现方式:

>>> cmp(1,2)
-1
>>> cmp(2,1)
1
>>> cmp(2,2)
0
>>> numbers=[5,2,7,9]
>>> numbers.sort(cmp)
>>> numbers
[2, 5, 7, 9]

自定义cmp函数

#!/usr/bin/env python
def compare(x,y):
    if x>y:
        return -1
    elif x<y:
        return 1
    else:
        return 0
numbers=[4,3,9,8]
numbers.sort(compare)
print numbers
=============运行结果=================》
[9, 8, 4, 3]

2)可选参数key

参数key和参数cmp类似,必须提供一个在排序过程中使用的函数,该函数并不是直接用来确定对象的大小,而是为每个元素创建一个键,然后所有元素根据键来排序。key是关键字参数。

>>> x=['hi','hello','howareyou','hey']
>>> x.sort()
>>> x
['hello', 'hey', 'hi', 'howareyou']

假设需要根据元素的长度来排序,那么可以用len作为键函数

>>> x=['hi','hello','howareyou','hey']
>>> x.sort(key=len)
>>> x
['hi', 'hey', 'hello', 'howareyou']

3)改变reverse的布尔值 ,reverse也是关键字参数

>>> x=[6,4,8,2,5]
>>> x.sort(reverse=True)
>>> x
[8, 6, 5, 4, 2]