python 数据结构 - 列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 数据结构 - 列表相关的知识,希望对你有一定的参考价值。

    Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表的元素可以修改,而字符串和元组不能(元祖元素的元素可以修改)。

列表类似c语言中的数组,但是python中的列表可以同时存放不同类型数据。eg: a = [‘m‘, 1, [‘b‘, 5], 2.0, (‘c‘, 2), {‘name‘: ‘admin‘}]

列表常见方法有

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 #列表
 5 lis = []    
 6 ‘‘‘等效 lis = list()  列表是有序的,可以索引‘‘‘
 7 
 8 lis.append(self, object)
 9 ‘‘‘ 把一个元素添加到列表的结尾,相当于lis[len(lis):] = [object] ‘‘‘
10 lis.extend(self, iterable)
11 ‘‘‘iterable(可迭代的,迭代器)。通过添加指定列表的所有元素来扩充列表,相当于 lis[len(lis):] = iterable‘‘‘
12 lis.insert(index, object)
13 ‘‘‘在指定位置插入一个元素,index是要插入位置的索引,object是要插入的元素‘‘‘
14 lis.remove(x)
15     ‘‘‘从列表中删除值为x的第一个元素,若没有,则返回一个错误‘‘‘
16 lis.pop(index=None)
17     ‘‘‘从列表中删除index指定的索引的值,并将其返回。若没有指定索引,默认删除最后一个元素,并将其返回‘‘‘
18 lis.clear()
19     ‘‘‘移除列表中的所有项,等同于 del lis[:] ‘‘‘
20 lis.index( x, start=None, stop=None)
21     ‘‘‘返回列表中第一个值为 x 的元素的索引,不存在就返回错误. 可指定开始点和结束点的索引,范围前开后闭‘‘‘
22 lis.count(x)
23     ‘‘‘返回 x 在列表中出现的次数‘‘‘
24 lis.sort(key=None, reverse=False)
25     ‘‘‘对列表中的元素进行排序,默认从小到大,不能比较不同类型数据,key指定以...排序,reverse=True 表示逆序(从大到小)‘‘‘
26 lis.reverse()
27     ‘‘‘倒序列表中的元素,不管数据类型,不排序,只是把整个列表倒置‘‘‘
28 lis.copy()
29     ‘‘‘返回列表的浅复制,等于lis[:] ‘‘‘

 

注:除 index()、count()、clear()、copy() 外,其余的方法都是对列表本身进行修改,操作过后,列表会改变。

计算列表长度:

1 >>> a = [m, 3, [b, 5], 2.0, (c, 2), {name: admin},6,]
2 >>> len(a)
3 7
4 >>> 

切片:

  列表切片前后原列表不变,切出来的分片是重新开辟一块内存的列表。

  切片时,范围前开后闭

 1 >>> a = [m, 3, [b, 5], 2.0, (c, 2), {name: admin},6,]
 2 >>> a
 3     [m, 3, [b, 5], 2.0, (c, 2), {name: admin}, 6]
 4 >>> b = a[1:6]
 5 >>> b
 6     [3, [b, 5], 2.0, (c, 2), {name: admin}]
 7 >>> c = a[2:]
 8 >>> c
 9     [[b, 5], 2.0, (c, 2), {name: admin}, 6]
10 >>> 

列表的比较:(对应索引的元素一一对应比较)

  从第一个元素开始比较(索引为0),只要有一个元素大,后面就不用再比较。类似字符串的比较,但字符串比较多是Asscii码

1 >>> a = [2,5,c,m,8]
2 >>> b = [2,5,c,n,6]
3 >>> a > b
4 False
5 >>> a < b
6 True
7 >>> 

判断元素是否在列表内:  in 、not in

>>> a = [m, 3, [b, 5], 2.0, (c, 2), {name: admin},6,]
>>> m in a
True
>>> 999 in a
False
>>> 

列表赋值与拷贝:

  赋值,a,b是指向的同一片内存,修改a(or b),那么b(or a)也会改变。

  分片拷贝:在内存中复制a一次,代码执行后c就复制完成,a,c 彼此独立存在于内存中,修改a(or c),那么c(or a)不会改变

 1 >>> a = [m, 3, [b, 5], 2.0, (c, 2), {name: admin}, 6]
 2 >>> b = a
 3 >>> id(a)
 4 2266953240072
 5 >>> id(b)
 6 2266953240072
 7 >>> c = a[:]
 8 >>> id(c)
 9 2266953239496
10 >>> a.remove(2.0)
11 >>> a
12 [m, 3, [b, 5], (c, 2), {name: admin}, 6]
13 >>> b
14 [m, 3, [b, 5], (c, 2), {name: admin}, 6]
15 >>> c
16 [m, 3, [b, 5], 2.0, (c, 2), {name: admin}, 6]
17 >>> 

列表推导式

   格式: [ 表达式 for x in 迭代器]、[表达式 for x in 迭代器 if 条件]、[表达式 for x in 迭代器 for y in 迭代器]...

  注:表达式可以是变量、常数、字符串、列表、元祖、字典... 

迭代字符串

1 >>> s = abcde
2 >>> [x for x in s]
3 [a, b, c, d, e]
4 >>> 

迭代字典

>>> dic = {name: root, age: 20, gender: man}
>>> [[%s : %s %(k,v)] for k,v in dic.items()]
[[name : root], [age : 20], [gender : man]]
>>> 

  注意:在迭代时进行类型转换为字典时,若有相同键名,新值会覆盖旧值  eg:

1 >>> [(x,y) for x in (m,n,) for y in range(2)]
2 [(m, 0), (m, 1), (n, 0), (n, 1)]
3 >>> dict([(x,y) for x in (m,n,) for y in range(2)])
4 {m: 1, n: 1}
5 >>> 

知识增长中 待补充。。。

以上是关于python 数据结构 - 列表的主要内容,如果未能解决你的问题,请参考以下文章

30 段 Python 实用代码

Python代码阅读(第25篇):将多行字符串拆分成列表

Python代码阅读(第40篇):通过两个列表生成字典

Python代码阅读(第13篇):检测列表中的元素是否都一样

即学即用的 30 段 Python 实用代码

如何将列表视图中的数据从一个片段发送到另一个片段