zoukankan      html  css  js  c++  java
  • 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 >>> 

    知识增长中 待补充。。。

  • 相关阅读:
    第三发
    第二发
    第一发
    要看的算法
    haxe坑
    TCP/IP协议三次握手与四次握手流程解析(转)
    Android动态类生成预加载-dexmaker使用
    Java中ArrayList 、LinkList区别
    Java解析YAML和Android解析YAML
    Java sax、dom、pull解析xml
  • 原文地址:https://www.cnblogs.com/xtsec/p/6561015.html
Copyright © 2011-2022 走看看