zoukankan      html  css  js  c++  java
  • python中的list

    python中list详解

    list相当于js中的array. array能做的事情, 差不多list都可以做到, 比如什么可变性,删除,添加,转变为字符串等基本操作list方法

    (一):我们来看一下,怎么声明一个list

    name = ['sam','jimmy'] 
    

    (二):在python中也是很有用的三个函数 len,max,min.

    1,len(): 用来获取list的长度

    >>> len(lists)
    5
    

    2,max(list|Numbers): 用来判断list中,最大的数字.

    >>> max(lists)
    5
    >>> max(1,2,3,4,5)
    5
    

    3,min(list|Numbers): 用来判断list中,最小的数字

    另外, 这里补充一个生成有序list最快捷的方式, 使用list comprehension.即,在括号里面使用 for statement. 实际上, 就是一个list 派生出另外一个list. 看一个demo

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

    range就是用来生成一个iterable

    补充:
    range(start, stop[, step]) -> range object
    具体含义就是born 一定范围的值. 比如range(10): 0~10.
    回到 list comprehension, 这个表达式x for x in range(10) 实际上, 就相当于

    lists = []
    for x in range(10):
       lists.append(x)
    

    了解了LC 之后,我们就可以脱离手码lists的困扰了. python 很方便有木有

    (三): python中的两个特性 切片, 迭代

    1,切片

    通常,我们想要获取list中的某个元素,直接使用下标即可.但是,如果你想要取出list中间连续的几个,那么就会用到切片这一神奇的功能.

    >>> my_list = ['p','r','o','g','r','a','m']
    >>> my_list[2:5]    # elements 3rd to 5th
    ['o', 'g', 'r']
    >>> my_list[:-5]    # 可以使用负数的index
    ['p', 'r', 'o', 'g']
    >>> my_list[5:]     # 从5一直到最末
    ['a', 'm', 'i', 'z']
    >>> my_list[:]      # 获取所有的ele
    ['p', 'r', 'o', 'g', 'r', 'a', 'm']
    

    关于切片,值得补充一下就是colon两边的数字代表的意义特么还不一样:比如: my_list[2:5]实际表现的意义是,获取list中[2,5-1]的元素,Ps: 下标从0开始)实际上, 关于切片,还有一个隐藏的parameter.

    >>> len[0:5:2]
    [1, 3, 5]
    

    第三个的参数的相当于设置步长,x+step,比如,你可以获得,奇数元素或者偶数元素等等.

    2,迭代

    实际上,这里的迭代,我们理解为for...in...循环就好.如下格式

    >>> for v in len:
            print(v)
    

    v就代表len中的每一个元素,然后你就可以执行相关的操作即可。另外, 如果你的list是这样的

    >>> lists = [[1,2],[2,3]]
    >>> for [a,b] in lists:
             print(a,b)
    

    套用同样的格式即可

    (四):关于python里相关操作list的方法.

    list方法

    1,添加

    在python中, 常有append,extend,insert 3个方法用来进行添加. 不过,在介绍这3个方法之前,我们先要体会一下python flexibility--+,*,切片. 利用这3个trick来进行添加.

    +
    我们使用+, 来对list进行扩展.但实际上,他并不会修改原始的list。 所以这就有点尴尬了

    >>> lists+[1]
    [1, 2, 3, 4, 5, 1]
    

    *
    使用*进行翻倍扩展.但,同样不会改变原值

    >>> lists * 2
    [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
    

    (1),append
    这里就是向list中,尾加一个元素

    >>> lists.append(1)
    

    (2),extend
    用来向list中,添加多个元素.

    >>> lists.extend([1,2,3,4])
    

    他和+操作的区别就是, +不会改变原始的list,而extend会!

    (3),insert
    用来往指定index后添加一个元素.

    >>> lists.insert(0,123)
    >>> lists.insert(0,[1,23])
    

    2,切片

    使用切片,来对list直接修改.

    >>> lists[1:3]=[1,2,3]  //只能使用另外一个list进行替代
    >>> lists
    [1, 1, 2, 3, 4, 5]
    

    这里简要说一下分片的原理吧. 分片实际上是,内部创建一个list,然后进行替换, 所以,对应的类型只能是list.
    比如下面, 就会报错

    >>> lists[1:3]=1
    TypeError: can only assign an iterable
    

    3,删除

    list里面的移除也是有很多讲究的, 常用的方法有pop,remove,del,clear

    (1),pop
    这里,我们就要将list理解为一个栈(Ps:一种数据结果). 他的结果就是先进后出(FILO). 相当于一个瓶子,你最后放的,会被最先拿出来. 实际上, 他和append是完全相反的.
    append->入栈
    pop->出栈
    使用pop时, 他会返回被删除的元素

    >>> lists = [1,2,3,4]
    >>> lists.pop()
    4
    >>> lists
    [1, 2, 3]
    

    我们对比看一下,append

    >>> lists.append(4)
    >>> lists
    [1, 2, 3, 4]
    

    另外, pop还可以用来删除指定index的ele.

    //删除第一个元素
    >>> lists.pop(0)
    

    (2),remove
    remove是用来移除指定值. 并且,一次只会移除一个

    >>> lists = [1,2,3,1,1,1]
    >>> lists.remove(1)
    >>> lists
    [1, 3, 1, 1, 1]
    

    (3),del && clear
    前面说了pop,用来删除最新的栈元素, 但是我怎么删除list中最先放入, 也就是 list[0]的元素呢?
    一个是用remove()造一个trick. 或者上面的pop例子

    >>> lists.remove(lists[0])
    >>> lists.pop(0)
    

    不过使用remove的可读性超级差(pop的还可以), 所以, 我们可以使用 python中的内置函数, del 进行删除

    del lists[0]
    

    这里,我们来对比一下,3者的复杂度

    del O(n - i)
    
    pop O(n - i)
    
    remove O(n)
    

    很容器看出, del和pop的复杂度,比remove小, 所以,如果你想删除以下标开始的list的话,pop和del都行.

    最后,我们如果想删除list的所有元素的话, 直接刚他. 使用clear()即可.

    >>> lists.clear()
    >>> lists
    []
    

    4,排序操作

    实际上, 这应该算是一切算法的根源了, 算法做的工作就是筛选和排序. 在list中,提供了两个方法供我们选择 sort, reverse.

    (1),reverse()
    实际上就是倒叙, 将你现在的list的顺序,逆向一遍

    >>> lists
    [1, 2, 3, 4]
    >>> lists.reverse()
    >>> lists
    [4, 3, 2, 1]
    sort([fn])
    

    (2),sort
    他根据fn的返回值来判断你原来顺序中的大小. fn接受两个参数fn(pre,next). 代表按照顺序的list的相邻两个元素.

    fn>0: 则保持现在的顺序

    fn<0: 交换两者顺序继续比较

    fn=0: 保留两者的顺序

    你可以自定义函数, 也可以直接使用默认的从小到大的排列.
    即:

    >>> lists = [1,3,2,4,2,3]
    >>> lists.sort()
    >>> lists
    [1, 2, 2, 3, 3, 4]
    

    注: sort本身自带了两个参数,可以用来决定排列的顺序: key,reverse

    >>> lists=['ss','sss','s','ss']
    >>> lists.sort(key=len)
    >>> lists
    ['s', 'ss', 'ss', 'sss']
    

    或者指明使用reverse=True

    >>> lists=['ss','sss','s','ss']
    >>> lists.sort(reverse=True)
    >>> lists
    ['sss', 'ss', 'ss', 's']
    

    当然, 如果你不想对原来的list进行改变, 可以使用sorted方法,返回一个新的list进行相关操作.
    我们使用,help(sorted)来看一下具体用法

    sorted(iterable, key=None, reverse=False)
        Return a new list containing all items from the iterable in ascending order.
    

    同样, 他默认情况下也是升序表示

    >>> lists
    [5, 4, 3, 2, 1]
    >>> sorted(lists)
    [1, 2, 3, 4, 5]
    

    同样,你也可以使用reverse和key进行相关指定. 同,list这里就不赘述了.

    5,查询

    在list 查询中, python也提供了我们两个方法, index,count.

    (1),index(ele): 用来查找具体ele,在list中的序号,没有则会出现ValueError的错误.具体表达式为:

    L.index(value, [start, [stop]])
    

    看到这个表示之后,我们大概就可以猜到index的基本用法了, 限定范围查找, 也是很重要的一个feature

    (2),count(ele):
    用来统计具体ele在list中出现的次数.

    >>> lists.count(2)
    1
    

    当然, 如果有同学相到, in 关键字能否实现这个查询的功能呢?答案 is yes!!!
    即, 我们判断一个ele 是否存在于list 可以使用in 来判断

    >>> if 1 in lists:
    ...     print(1)
    ... 
    1
    //或者使用index
    >>> if lists.index(1):
         print(1)
    1
    

    这都是完全行得通的

    6,复制

    (1),分片
    如果你想复制一个list最快的方法就是使用分片. 即

    >>> lists
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> newOne = lists[0:3]
    >>> newOne
    [0, 1, 2]
    

    (2),copy()

    newOne = lists.copy();
    //或者使用
    newOne = lists[:]
    

    这样,就避免了 内存地址重叠的problem了.

    7,额外方法

    除了上面说了的max,min,list等转换方法外, python 内置的还有sum,all,any.

    (1),sum()
    返回 list中所有元素之和

    sum(lists)
    

    (2),all()
    是为了判断, lists中所有元素通过bool(ele)之后都为True,则返回True,所以,当list元素中有'',0,[]的话,则会返回False。另外,如果list为空的话,返回的也是True

    (3),any()
    使用bool(ele) 判断list中的每一个元素, 如果有一个为ture的话, 返回True, 相当于或的意思. 如果list为空的话返回的是False

    >>> lists
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> any(lists)
    True
    >>> all(lists)  //存在0
    False
    >>> lists = []
    >>> any(lists) //没有元素,不通过
    False
    >>> all(lists)  //没有元素,通过
    True
    

    如有问题可联系QQ:2499578824
  • 相关阅读:
    poj2352树状数组解决偏序问题
    Python中的输入(input)和输出打印
    Python中的输入(input)和输出打印
    IP协议
    IP协议
    Python中的可迭代Iterable和迭代器Iterator
    Python中的可迭代Iterable和迭代器Iterator
    Python中的变量和数据类型
    Python中的变量和数据类型
    TCP的三次握手和四次挥手和UDP协议
  • 原文地址:https://www.cnblogs.com/chunbo/p/11189502.html
Copyright © 2011-2022 走看看