python-数据类型之列表

List是处理一组有序项目的数据结构,是python中使用最频繁的数据结构实现,能够完成大多数数据集合类的数据结构实现。支持字符、数字、字符串甚至还能够嵌套列表、元组、字典等。

(一)列表的建立
(1)List是[]表示,内部元素间用逗号隔开。
(2)List中能够放元组、字典、列表、字符串、类、内建函数等。
(3)建立一个列表就像给一个变量赋值同样的简单.你手工写一个列表(空的或者有值的都行)而后赋给一个变量,列表是由方括号([])来定义的,固然,你也能够用工厂方法来建立它.
代码:python

>>> 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()方法来追加元素到列表中。app

>>> 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()方法来删除并从列表中返回一个特定对象.code

>>> 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)列表的切片操做:rem

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()的时候要注意,这些操做会在列表中原地执行操做,也就是说现有的列表内容会被改变,可是没有返回值!是的,与之相反,字符串方法确实有返回值:

四、综合列表的推导(列表推导)
[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]
相关文章
相关标签/搜索