python 列表特点及常用操作

发布时间:2019-09-10 09:20:43编辑:auto阅读(1737)

    一、列表的特性

    1、有序的集合

    2、通过偏移来索引,从而读取数据

    3、支持嵌套

    4、可变的类型


    列表支持的方法

    >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
    >>> a= [1,2,3]
    >>> a[-1]
    3
    >>> b=[[1,2,3],[3,4,5]] #列表可以嵌套
    >>> b[1]
    [3, 4, 5]
    >>> b[1][1]
    4
    >>> b[1]=10 #原地修改列表
    >>> b
    [[1, 2, 3], 10]
    >>> id(b)
    46944392836376
    >>> b[0]=5
    >>> b
    [5, 10]
    >>> id(b)
    46944392836376


    二、列表的常用操作

    1、切片:正向索引、反向索引、默认索引

    a = [1,2,3,4,5,6,7]
    >>> a = [1,2,3,4,5,6,7]
    >>> a
    [1, 2, 3, 4, 5, 6, 7]
    >>> a[0:4:1]
    [1, 2, 3, 4]
    >>> a[-1:-4:-1]
    [7, 6, 5]
    >>> a[1:]
    [2, 3, 4, 5, 6, 7]
    >>> a[1::2]
    [2, 4, 6]



    2、添加操作:

    +: 生成一个新的列表

    Extend  接受参数并将该参数的每个元素都添加到原有的列表中,原地修改列表而不是新建列表

    Append :添加任意对象到列表的末端

    Insert: 插入任意对象到列表中,可以控制插入位置。


     

    >>> a = [1,2,3]
    >>> b=[4,5,6]
    >>> c=a+b
    >>> print c #产生一个新的列表
    [1, 2, 3, 4, 5, 6]
    >>> id(a)
    46944392835016
    >>> a.extend(b)  #原地修改列表
    >>> print a
    [1, 2, 3, 4, 5, 6]
    >>> id(a)
    46944392835016
    >>> a=[1,2,3]
    >>> a.append(4) #添加任意对象到列表的末段
    >>> print a
    [1, 2, 3, 4]
    >>> a.insert(1,'ab')
    >>> print a
    [1, 'ab', 2, 3, 4]


    3、修改,修改列表本身只需要直接赋值操作就行。

    >>> A = [1,2,3]
    >>> A[0]='python'
    >>> print A
    ['python', 2, 3]

     


    4、删除操作:

    Del :我们通过索引删除指定位置的元素。

    Remove:移除列表中指定值的第一个匹配值。如果没找到的话,会抛异常。

    Pop:返回最后一个元素,并从list中删除它。

    >>> a
    ['python', 'ab', 2, 3, 4]
    >>> 
    >>> del a[0]
    >>> a
    ['ab', 2, 3, 4]
    >>> a.remove(2)  #删除的是给定的value
    >>> a
    ['ab', 3, 4]
    >>> a.remove(2) #如果没找到的话,会抛异常。
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    ValueError: list.remove(x): x not in list
    >>> a
    ['ab', 3, 4]
    >>> a.pop() #默认是删除最后一个元素,也可以跟一个具体的index
    4
    >>> a
    ['ab', 3]

     

    5、成员关系:

    in 、not in我们可以判断一个元素是否在列表里。 

    返回一个bool类型,元素在列表里返回true,否则返回fasle.

    >>> a = [1,2,3]
    >>> 2 in a
    True
    >>> 5 not in a
    True


    6、列表推导式:


    [expr for iter_var in iterable] 

    6.1 、首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

    比如我们要生成一个包含1到10的列表

    >>> [x for x in range(1,11)]
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> range(1,11)
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


    [expr for iter_var in iterable if cond_expr]


    6.2、加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

    要生成包含1到10的所有奇数列表。

    >>> range(1,11,2)
    [1, 3, 5, 7, 9]
    >>> [x for x in range(1,11) if x % 2 == 1]
    [1, 3, 5, 7, 9]



    6.3 取出1-100的所有值的平方。

    [x*x for x in range(100)]

    6.4 生成字符串 

    ['the %s' % d  for d in xrange(10)]

    6.5 生成元组 

    >>> [(x,y) for x in range(2) for y in range(2)]
    [(0, 0), (0, 1), (1, 0), (1, 1)]

    6.6 生成字典  

    >>> dict([(x,y) for x in range(3) for y in range(2)]) #后面的键会覆盖前面的键
    {0: 1, 1: 1, 2: 1}


     


    7、排序翻转:sort,reverse

    >>> a= [33,11,22,44]
    >>> b=a.sort() #直接修改原列表,返回的是一个None
    >>> print b
    None
    >>> print a
    [11, 22, 33, 44]

    list的reverse函数:反转一个list, 直接修改原列表,它的返回值为none

    比如上面的列表a

    b = a. reverse()
    print b  #输出的内容是None
    >>> b=a.reverse()
    >>> a  #直接看a列表变量能看到翻转的效果。
    [44, 33, 22, 11]


    8、内置list方法,返回一个列表,参数是可迭代对象。里面输出的内容还是保持了传入的可迭代对象的元素和顺序。如果参数为空,则返回一个空的列表

    a = "asd"
    list(a)
    >>> a="asd"
    >>> list(a)
    ['a', 's', 'd']
    >>> list((1,3))
    [1, 3]


    9、xrange和range的具体区别。

    9.1 xrange的用法:

    xrange(开始,结束,步长)

    xrange 它生成一个xrange对象。

    比如:

    >>> a = xrange(1,10)
    >>> print type(a)
    <type 'xrange'>
    >>> print a[0]
    1
    >>> x = xrange(1,10)  #返回的是一个生成器
    >>> x
    xrange(1, 10)
    >>> b =range(1,10) #返回的是一个列表
    >>> type(b)
    <type 'list'>
    >>> b
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> x[0]
    1
    >>> b[0]
    1


    range: 直接生成一个列表对象。

    xrange: 它是生成一个xrange对象.

    xrange的用法:


    1、当我们需要操作一个非常大的数据,而且内存比较吃紧的时候,我们可以用xrange来操作省内存。xrange的数据是取的时候才生成,而range是一次性生成好

    2、xrange一般用在循环里面,比如我们只需要操作部分数据的话,而不是返回全部元素来完成操作,推荐用xrange,效率更高。


    比如:

    for m in range(1000):  #[0-999]
        if m == 10:
            print 'sss'
            break
    for m in xrange(1000):  #[0-10] 
        if m == 10:
            print 'sss'
            break



    10、列表的引用

    >>> a = ['i','am','lilei']
    >>> b=a
    >>> id(a)
    46944392840544
    >>> id(b)
    46944392840544
    >>> a[2]="hello"
    >>> print b[2]
    hello
    >>> print b
    ['i', 'am', 'hello']
    >>> del b
    >>> a #删除了b的引用,a的引用还是在
    ['i', 'am', 'hello']



    小技巧之再议删除

    1、a = []

    2、del a 删除列表对象的引用

    3、del a[:] 清空列表对象里的元素,等价于a =[]

    >>> a = ['i','am','lilei']
    >>> b=a
    >>> a=[]
    >>> b
    ['i', 'am', 'lilei']
    >>> del a[:]
    >>> a
    []
    >>> b
    ['i', 'am', 'lilei']
    >>> a=b
    >>> del a
    >>> b
    ['i', 'am', 'lilei']


    练习:


    1、下面列表:

    a = [1,2,3,4,5,333,11,44]

    输出下面的结果:

    [4,5,333]


    >>> a[3:6]  # 第一个参数是闭区间、第二个参数是开区间

    [4, 5, 333]

    >>> a[-5:-2]

    [4, 5, 333]



    2、有下面2个列表

    a = [1,2,3]

    b = [4,5,6]


    用2个方法输出下面结果:


    [1,2,3,4,5,6]

    >>> a+b
    [1, 2, 3, 4, 5, 6]
    >>> a.extend(b) #将b的内容打散插入到a中
    >>> a
    [1, 2, 3, 4, 5, 6]



    >>> a = [1,2,3]

    >>> a.append(b) #将b作为一个整体插入

    >>> a

    [1, 2, 3, [4, 5, 6]]


    >>> a.insert(3,b) #将b作为一个整体插入

    [1, 2, 3, [4, 5, 6]]


    三 有下面2个列表:


    a = [1,99,33,44,55,22]

    b= [11,33,54]

    输出结果:


    1:[1,2,99,33,44,55,22,(11,33,54)]


    2: [1,2,99,33,101,44,55,22]



    四:用列表推导式生成100内的大于20的偶数

    >>>[x for x in range(20,101) if x%2==0]
    >>> range(20,101,2)


    五: 已知:元组 a = (1,2,3) 利用list方法,输出下面的结果:

    (1,2,4)

    >>> a = (1,2,3)
    >>> a=list(a)
    >>> a[2]=4
    >>> a=tuple(a)
    >>> a
    (1, 2, 4)



    六: 利用列表推导完成下面习题:

    1 输出结果:[1 love python,2 love python,3 love python,.... 10 love python]

    >>> ["%s love python"  %  x  for x in range(1,11)]


    2 输出结果:[(0,0),(0,2),(2,0),(2,2)]

    >>> [(x,y) for x in range(0,3,2) for y in range(0,3,2)]
    [(0, 0), (0, 2), (2, 0), (2, 2)]


    七:

    a = [1,2,3]

    b = a[:]

    del a

    b的值是什么,为什么呢?

    >>> a = [1,2,3]
    >>> b=a[:]
    >>> del a
    >>> b
    [1, 2, 3]

    因为b和a指向的是不同的对象地址








关键字