python列表list详解

     版权声明:本文为博主原创文章,转载请注明本文链接。文章内容如有错误望能指正,以免误导更多人。 https://blog.csdn.net/feixiangqiao/article/details/88870319

列表list

  • 一个队列,一个排列整齐的队伍
  • 列表内的个体称作元素,由若干元素组成列表
  • 元素可以是任意对象(数字、字符串、对象、列表等)
  • 列表内元素有顺序,可以使用索引
  • 线性的数据结构
  • 使用[]表示
  • 列表是可变

一、列表list定义 初始化

  • list()->new empty list
  • list(iterable)->new list initialized form iterables’s items
  • 列表不能一开始就定义大小
    lst = list()  
    lst = []  
    lst = [2,6,9,'ab']  
    lst = list(range(5))  

二、列表索引访问

  • 索引,也叫下标
  • 正索引:从左至右,从0开始,为列表中每一个元素编号
  • 负索引:从右至左,从-1开始
  • 正负索引不可以超界,否则引起异常IndexError
  • 为了理解方便,可以认为列表是从左至右排列的,左边是头部,右边是尾部* 左边是下界,右边是上界
  • 列表通过索引访问
        list[index],index就是索引,使用中括号访问
  • 列表分类
        1)列表
            检索方便,增删改不方便
        2)链表
            增删改方便,检索不方便
        3)queue
            先进的先出
        4)stack
            后进的先出

三、列表查询

  1. index(value,[start,[stop]])
    通过值value,从指定区间找到列表内的元素是否匹配
    匹配第一个就立即返回索引
    匹配不到,抛出异常ValueError
    举例:
        In [117]: lst=[1,2,4]

        In [118]: lst
        Out[118]: [1, 2, 4]

        In [119]: lst.index(4)
        Out[119]: 2
  1. count(value)
    返回列表中匹配value的次数
    举例:
        In [124]: lst=[1,2,3,4,3,5]

        In [125]: lst
        Out[125]: [1, 2, 3, 4, 3, 5]

        In [126]: lst.count(3)
        Out[126]: 2
  1. 时间复杂度
    index和count方法都是O(n)
    随着列表数据规模的增大,而效率下降
    如何返回列表元素的个数?如何遍历?如何设计高效?
    len()
    举例:
        In [124]: lst=[1,2,3,4,3,5]

        In [125]: lst
        Out[125]: [1, 2, 3, 4, 3, 5]

        In [128]: len(lst)
        Out[128]: 6

        In [129]: for i in lst:
            ...:     print(i)
            ...:
        1
        2
        3
        4
        3
        5

四、如何查帮助

  1. 官方帮助文档
    搜索关键字
  2. ipython中
    help(keyword)
    keyword可以是变量、对象、类名、函数名、方法名

五、列表元素修改

    索引访问修改
    list[index] = value
    索引不要超界
    举例:

        In [130]: lst=['a','c','d']

        In [131]: lst
        Out[131]: ['a', 'c', 'd']

        In [132]: lst[1] = 1

        In [133]: lst
        Out[133]: ['a', 1, 'd']

六、列表增加、插入元素

  1. append(object)->None
    列表尾部追加元素,返回None
    返回None就意味着没有新的列表产生,就地修改
    时间复杂度是O(1)
    举例:
        In [134]: lst
        Out[134]: ['a', 1, 'd']
        In [136]: lst.append(1)

        In [137]: lst
        Out[137]: ['a', 1, 'd', 1]
  1. insert(index,object)->None
    在指定的索引index处插入元素object
    返回None就意味着没有新的列表产生,就地修改
    时间复杂度是O(n)
    索引能超上下界吗?
        超越上界,尾部追加
        超越下界,头部追加
    举例:
        In [137]: lst
        Out[137]: ['a', 1, 'd', 1]

        In [138]: lst.insert(2,'def')

        In [139]: lst
        Out[139]: ['a', 1, 'def', 'd', 1]
  1. extend(iteratable)->None
    将可迭代对象的元素追加进来,返回None
    就地修改
    举例:
        In [140]: lst
        Out[140]: ['a', 1, 'def', 'd', 1]

        In [142]: lst.extend([1,2,3])

        In [143]: lst
        Out[143]: ['a', 1, 'def', 'd', 1, 1, 2, 3]

        In [144]: lst.extend('ddddd')

        In [145]: lst
        Out[145]: ['a', 1, 'def', 'd', 1, 1, 2, 3, 'd', 'd', 'd', 'd', 'd']
  1. + -> list
    连接操作,将两个列表连接起来
    产生新的列表,原列表不变
    本质上调用的是魔术方法__add__()方法
    举例:
        In [148]: lst=[1,2]

        In [149]: l2st=['a','b']

        In [150]: l3st=lst + l2st

        In [151]: l3st
        Out[151]: [1, 2, 'a', 'b']
  1. * -> list
    重复操作,将本列表元素重复n次,返回新的列表

    1)正常列表重复操作

        In [154]: lst
        Out[154]: [1, 2]

        In [155]: l2st = lst * 3

        In [156]: l2st
        Out[156]: [1, 2, 1, 2, 1, 2]

        In [157]: l2st[1] = 'a'

        In [158]: l2st
        Out[158]: [1, 'a', 1, 2, 1, 2]

        In [159]: lst
        Out[159]: [1, 2]

    2)嵌套列表操作

        In [165]: lst
        Out[165]: [[1, 2, 3]]

        In [166]: lst=[[1,2,3]]

        In [167]: l2st = lst * 3

        In [168]: l2st
        Out[168]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

        In [169]: l2st[1][1]='a'

        In [170]: l2st
        Out[170]: [[1, 'a', 3], [1, 'a', 3], [1, 'a', 3]]

        In [171]: lst
        Out[171]: [[1, 'a', 3]]

七、列表删除元素

  1. remove(value) -> None
    从左至右查找第一个匹配value的值,移除该元素,返回None,就地修改
    效率:O(n)
    举例:
        In [173]: lst=[1,2,1,3]

        In [174]: lst
        Out[174]: [1, 2, 1, 3]

        In [175]: lst.remove(1)

        In [176]: lst
        Out[176]: [2, 1, 3]
  1. pop([index]) -> item
    不指定索引index,就从列表尾部弹出一个元素
    指定索引index,就从索引出弹出一个元素,索引超界抛出IndexError错误
    效率?指定索引的时间复杂度?不指定索引呢?
    举例:
        In [177]: lst=[1,2,1,3]

        In [179]: lst.pop(3)
        Out[179]: 3

        In [180]: lst
        Out[180]: [1, 2, 1]
  1. clear() -> None
    清除列表所有元素,剩下一个空列表
    举例:
        In [181]: lst
        Out[181]: [1, 2, 1]

        In [182]: lst.clear()

        In [183]: lst
        Out[183]: []

八、列表其他操作

  1. reverse() -> None
    将列表元素反转,返回None
    就地修改
    举例:
        In [185]: lst=[1,2,3,4,'a','b','c']

        In [186]: lst
        Out[186]: [1, 2, 3, 4, 'a', 'b', 'c']

        In [187]: lst.reverse()

        In [188]: lst
        Out[188]: ['c', 'b', 'a', 4, 3, 2, 1]
  1. sort(key=None,reverse=False) -> None
    对列表元素进行排序,就地修改,默认升序
    reverse为True,反转,降序
    key一个函数,指定key如何排序
        lst.sort(key=function)
    举例:
        In [203]: lst=[1,2,3,4,'7','6']

        In [204]: lst
        Out[204]: [1, 2, 3, 4, '7', '6']

        In [205]: lst.sort(key=int)

        In [206]: lst
        Out[206]: [1, 2, 3, 4, '6', '7']

        In [207]: lst.sort(key=int,reverse=True)

        In [208]: lst
        Out[208]: ['7', '6', 4, 3, 2, 1]
  1. in
    [3,4] in [1,2,[3,4]]  
    for x in [1,2,3,4]  

九、列表复制

  1. shadow copy
    影子拷贝,也叫浅拷贝,遇到引用类型,只是复制一个引用而已
    举例:
        In [165]: lst
        Out[165]: [[1, 2, 3]]

        In [166]: lst=[[1,2,3]]

        In [167]: l2st = lst * 3

        In [168]: l2st
        Out[168]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

        In [169]: l2st[1][1]='a'

        In [170]: l2st
        Out[170]: [[1, 'a', 3], [1, 'a', 3], [1, 'a', 3]]

        In [171]: lst
        Out[171]: [[1, 'a', 3]]
  1. 深拷贝
    copy模块提供了deepcopy,拷贝以后两个列表互不影响
    举例:
        In [226]: import copy

        In [227]: lst = [1,2,3,['a','b']]

        In [228]: lst
        Out[228]: [1, 2, 3, ['a', 'b']]

        In [229]: l2st = copy.deepcopy(lst)

        In [230]: l2st
        Out[230]: [1, 2, 3, ['a', 'b']]

        In [232]: l2st[3][1] = 1

        In [233]: l2st
        Out[233]: [1, 2, 3, ['a', 1]]

        In [234]: lst
        Out[234]: [1, 2, 3, ['a', 'b']]

十、随机数

  • random模块
    举例:
    import random
  • randint(a,b)返回[a,b]之间的整数
    举例:
        In [8]: random.randint(1,3)
        Out[8]: 1

        In [9]: random.randint(1,3)
        Out[9]: 2

        In [10]: random.randint(1,3)
        Out[10]: 3
  • choice(seq)从非空序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。random.choice[1,3,5,7]
    举例:
        In [11]: random.choice(range(10))
        Out[11]: 5

        In [12]: random.choice(range(10))
        Out[12]: 1

        In [13]: random.choice(range(10))
        Out[13]: 1

        In [14]: random.choice(range(10))
        Out[14]: 4

        In [15]: random.choice(range(10))
        Out[15]: 9


        In [17]: random.choice([1,2,3,5,7,9])
        Out[17]: 2

        In [18]: random.choice([1,2,3,5,7,9])
        Out[18]: 1

        In [19]: random.choice([1,2,3,5,7,9])
        Out[19]: 5
  • randrange([start,] stop [,step])从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1。random.randrange(1,7,2)
    举例:
        In [24]: random.randrange(1,10,2)
        Out[24]: 1

        In [25]: random.randrange(1,10,2)
        Out[25]: 5

        In [26]: random.randrange(1,10,2)
        Out[26]: 7

        In [27]: random.randrange(1,10,2)
        Out[27]: 9

        In [28]: random.randrange(1,10,2)
        Out[28]: 3
  • random.shuffle(list) -> None就地打乱列表元素
    举例:
        In [29]: lst = [1,'a','b',2,3,'c']

        In [30]: lst
        Out[30]: [1, 'a', 'b', 2, 3, 'c']

        In [31]: random.shuffle(lst)

        In [32]: lst
        Out[32]: [1, 3, 2, 'c', 'a', 'b']
  • sample(population,k)从样本空间或总体(序列或者集合类型)中随机取出k个不同的元素,返回一个新的列表
    举例:

      1)random.sample([‘a’,‘b’,‘c’,‘d’],2)

        In [32]: lst
        Out[32]: [1, 3, 2, 'c', 'a',

        In [34]: random.sample(lst,2)
        Out[34]: ['a', 'b']

        In [35]: random.sample(lst,2)
        Out[35]: ['a', 'c']

        In [36]: random.sample(lst,2)
        Out[36]: ['a', 'b']

        In [37]: random.sample(lst,2)
        Out[37]: ['c', 'a']

      2)random.sample([‘a’,‘a’],2)会返回什么结果

        In [43]: random.sample(['a','a'],2)
        Out[43]: ['a', 'a']

        In [44]: random.sample([1,1],2)
        Out[44]: [1, 1]
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值