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]   #这里可以是[123 for x in s],然后就是[123,123,123,123,123],说这个的目的是要明白这里相当于把前面的表达式(x)循环几遍,然后都加入到列表中
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 >>> 

知识增长中 待补充。。。

原文地址:https://www.cnblogs.com/xtsec/p/6561015.html