List是处理一组有序项目的数据结构,是python中使用最频繁的数据结构实现,可以完成大多数数据集合类的数据结构实现。支持字符、数字、字符串甚至还可以嵌套列表、元组、字典等。
(一)列表的创建
(1)List是[]表示,内部元素间用逗号隔开。
(2)List中可以放元组、字典、列表、字符串、类、内建函数等。
(3)创建一个列表就像给一个变量赋值一样的简单.你手工写一个列表(空的或者有值的都行)然后赋给一个变量,列表是由方括号([])来定义的,当然,你也可以用工厂方法来创建它.
代码:
>>> alist=[123,"abc",4.56,['inner','list'],7-9j]
>>> anotherList=[None,"something to see here"]
>>> print alist
[123, 'abc', 4.56, ['inner', 'list'], (7-9j)]
>>> print anotherList
[None, 'something to see here']
>>> aListThatStartedEmpty=[]
>>> print aListThatStartedEmpty
[]
>>> list("fool") #工厂方法
['f', 'o', 'o', 'l']
(二)列表的基本操作
列表的基本操作:增删改查
(1)读取(访问列表的值):列表的切片操作就像字符串中一样;切片操作符([])和索引值或索引值范围一起使用
>>> lista=[1,2,3,4]
>>> print lista[0]
>>> print lista[-1]
>>> print lista[1]
>>> print lista[-2]
(2)修改(更新列表):可以通过在等号的左边指定一个索引或者索引范围的方式来更新一个或几个元素,你也可以用 append()方法来追加元素到列表中。
>>> lista[0]+=10
>>> lista[0:3]=[3,4,5,6]
>>> lista
[3, 4, 5, 6, 4]
(3)遍历:
>>> for i in lista:
... print i
(4)删除:要删除列表中的元素,如果你确切的知道要删除元素的素引可以用 del 语句,否则可以用remove()方法.通过 pop()方法来删除并从列表中返回一个特定对象.
>>> lista=[1,2,3,4]
>>> del lista[-1]
>>> del lista[0]
>>> lista
[2, 3]
>>> print lista
>>> lista.remove(3)
>>> lista
[2]
>>> listb=["a","b","c","d"]
>>> listb.pop() #pop删除最后一个
'd'
>>> listb
['a', 'b', 'c']
(5)增加:append、insert、extend
>>> lista
>>> lista.append("abc")
>>> lista.append([1,2,3])
>>> lista.extend([4,5,6])
>>> lista.insert(1,1000)
>>> lista
注:extend()方法的参数支持任何可迭代对象如下的文件:
>>>motd=[]
>>> motd.append("msg of the day")
>>> f=open(r"C:\Users\AA\Desktop\test1.txt","r")
>>> motd.extend(f)
>>> motd
['msg of the day', 'hello world\n']
>>> f.close()
(6)合并列表:
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a+b
(7)列表的切片操作:
print str[0:3] #截取第一位到第三位的字符
print str[:] #截取字符串的全部字符
print str[6:] #截取第七个字符到结尾
print str[:-3] #截取从头开始到倒数第三个字符之前
print str[2] #截取第三个字符
print str[-1] #截取倒数第一个字符
print str[::-1] #创造一个与原字符串顺序相反的字符串
print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
print str[-3:] #截取倒数第三位到结尾
print str[:-5:-3] #逆序截取
详解:列表的下标有三个参数:beg(起始下标),end(终止下标),delta(变化量)
当delta小于0时,beg默认为len(array)-1,end默认为开头之前。
当delta大于0时,beg默认为0,end默认为最末之后。
当delta未给出时:delta默认为1
注:列表切片产生的是列表的副本,与原列表不是同一份空间。切片生成的子序列元素是源版的拷贝。因此切片是一种浅拷贝。
>>> x=[1,2,3]
>>> y=x[:]
>>> x[0]=-1
>>> y
[1, 2, 3]
切片的写操作:
>>> x=[1,2,3,4,5]
>>> x[2:0]=[990]
>>> x
[1, 2, 990, 3, 4, 5]
>>> del x[2:3]
>>> x
[1, 2, 3, 4, 5]
>>> del x[3:2] #如果from<to del操作无效
>>> x
[1, 2, 3, 4, 5]
(三)列表的运算符:len(list)、+、*、in 、遍历
>>>a=[1,2,3]
>>>len(a)
3
>>>[1,2,3]+[4,5,6]
[1, 2, 3, 3, 4, 5]
>>>['a']*3
['a', 'a', 'a']
>>>3 in a
True
>>>
>>> for i in [1,2,3]:print i
...
1
2
3
(四)列表的函数与方法
(1)列表统计
>>>[2,4,5,4,4,4,4].count(4)
5
(2)列表index(value,start,end) start end为闭开区间
a=[2,3,4,'b']
a.index('b')
a.index('b',2)
a.index('b',4)
a.index('b',1,5)
解释:a.index(‘b’,1,5)
从a中查找元素b的位置,从索引1位置开始包括1,到索引位置5但不包括位置5
注:index()来检查一个元素是否存在于一个list中并不是个好主意,因为不存在就会出错。应该先用 in 成员关系操作符(或者是 not in)检查一下,然后在用 index()找到这个元素的位置。
代码(可以避免index报错):
>>> for i in ['compact disc', 45, '8-track tape']:
... if i in music_media:
... print music_media.index(i)
0
1
2
(3)列表pop删除-pop(index),index不写默认为最后一个元素的索引,可以写索引
>>> a=range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print a.pop()
9
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> print a.pop(0)
0
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]
(4)Cmp:列表比较,相等返回0,大于返回1,小于返回-1
>>> a=[1,2]
>>> b=[1,2,3]
>>> cmp(a,b)
-1
>>> a=[]
>>> b=[]
>>> cmp(a,b)
0
(5)列表reverse()-列表反向输出并不会排序
>>> a=[3,4,5,6,7,8,9]
>>> a.reverse()
>>> a
[9, 8, 7, 6, 5, 4, 3]
(6)列表sort()-列表排序
>>> a=[3,4,5,6,7,8,9]
>>> a.sort()
>>> a
[3, 4, 5, 6, 7, 8, 9]
Sorted:
>>> a=[1,-1,-2,4,-3,3]
>>> b=sorted(a)
>>> print b
[-3, -2, -1, 1, 3, 4]
>>> print a
[1, -1, -2, 4, -3, 3]
注:那些可以改变对象值的可变对象的方法是没有返回值的!
在使用可变对象的方法如 sort(),extend()和 reverse()的时候要注意,这些操作会在列表中原地执行操作,也就是说现有的列表内容会被改变,但是没有返回值!是的,与之相反,字符串方法确实有返回值:
4、综合列表的推导(列表推导)
[expr for iter_var in iterable]
这个语句的核心是 for 循环, 它迭代 iterable 对象的所有条目. 前边的 expr 应用于序列的每个成员, 最后的结果值是该表达式产生的列表. 迭代变量并不需要是表达式的一部分.
[expr for iter_var in iterable if cond_expr]
(1)先执行for后if,然后执行的结果放到list中
(2)如果是两个for,则先执行左边的for,在执行右边的for,执行的结果放到List中
>>> [x for x in range(1,10,2)]
[1, 3, 5, 7, 9]
>>> [x**2 for x in range(1,10,2)]
[1, 9, 25, 49, 81]
>>> [i for i in range(20) if i%2==0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
d = {'x': 'A', 'y': 'B', 'z': 'C' }
print [k + '=' + v for k, v in d.iteritems()]
例子1:矩阵转置:
a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
print [ [j[i] for j in a] for i in range(3)]
以下为例子进行分析:
a=[[1,2],[4,5]]
print [ [j[i] for j in a] for i in range(2)]
分析:
for i in range(2)—>i:0 —>第一次循环
for j in a:—第一次:[1,2]
1,2—>[1]
for j in a:—第2次:[4,5]
4,5—>[1,4]
for i in range(2)—>i:1 —>第二次循环
for j in a:—第一次:[1,2]
1,2—>[2]
for j in a:—第2次:[4,5]
4,5—>[2,5]
[[1,4] ,[2,5]]
例子2:删除列表的3,6,9,12
a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
print [ [i[j] for j in [1,2]]for i in a]