详解Python列表的常用操作及应用是怎样的

Admin 2022-11-22 群英技术资讯 507 次浏览

这篇文章给大家分享的是“详解Python列表的常用操作及应用是怎样的”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。


Python基础学习之列表操作

1. 列表的增,删,改,查

1.1 列表的增加,常用的方法有:append, extent, incert

  • append() 在列表的最后面增加元素;
  • heros = ['马里奥', '路易斯', '林克'] # 列表的增加 append() heros.append('后羿') # 在列表最后追加值 print(heros) #输出:['马里奥', '路易斯', '林克', '后羿']
  • insert() 在列表的指定位置增加元素;
  • # 列表插入 heros.insert(3, '战神') print(heros) # 输出:['马里奥', '路易斯', '林克', '战神', '后羿']
  • extend() 将两个列表合并为一个列表
  • # 列表合并 heros2 = ['屠夫', '虚空'] heros.extend(heros2) print(heros) # 输出:['马里奥', '路易斯', '林克', '战神', '后羿', '屠夫', '虚空']

    1.2 列表的删除,常用的方法有:pop, clear , remove

  • pop() 在列表的最后面增加元素;pop() 只可以传入整数的index值,不能传入列表中的元素;
  • heros= ['马里奥', '路易斯', '林克', '战神', '后羿', '屠夫', '虚空'] x = heros.pop() # 默认删除最后一个数据,并返回被删除的值 print(heros) # heros中删除了最后的元素,输出为:['马里奥', '路易斯', '林克', '战神', '后羿', '屠夫'] print(x) # pop 方法返回了被删除的值,这一点很重要,可以对变成带来便利;输出为:虚空 x = heros.pop(3) # pop() 也可以指定删除的位置,x输出为:战神
  • clear() 清空列表中的所有元素,但是保留列表名,即:使列表变为空列表,但列表存在;
  • heros.clear() #清空heros中的所有元素; print(heros) # 输出:[] # del 也可以使用但是不推荐,如果没有写index, 会将变量都删掉,即不再有hores这个列表;
  • remove() 可以传入列表中的元素
  • heros.remove('路易斯') heros.remove('路易斯') #再次删除,数据不存在,则会报错 ValueError: list.remove(x): x not in list print(heros)
  • del() 可以删除元素(不推荐使用),也可以删除列表变量本身,一般用来删除变量本身
  • a=['a','b','c'] # 删除元素 不推荐使用这种方法! del a[1] #传入元素,则删除对应的元素; print(a) # 输出为:['a', 'c'] # 删除变量 del a print(a) # 变量a 已经被删除,所以这里会报错; error: name 'a' is not defined

    1.3 列表的修改,直接对制定元素赋值即可;

    • 对制定元素进行赋值,即可修改列表;
    # 列表的修改 heros = ['后羿', '屠夫', '路易吉', '马里奥'] heros[1] = '库里' print(heros) # 输出:['后羿', '库里', '路易吉', '马里奥']

    1.4 列表的查询,常用方法有 index, count, in

  • index() 传入列表的元素,可以返回元素在列表中的位置
  • heros = ['后羿', '库里', '路易吉', '马里奥'] a = heros.index('库里') print(a) # 返回元素的位置,输出:1 b = heros.index('林克') # 列表中没有值,会报错;error: '林克' is not in list
  • count() 可以查询列表中的某个值的个数
  • heros = ['后羿', '库里', '路易吉','库里', '马里奥'] a = heros.count('库里') print(a) # 返回元素的位置,输出:2
  • in 可以查询某个值是否在列表中
  • heros = ['后羿', '库里', '路易吉','库里', '马里奥'] print('林克' in heros) # 返回False

    2. 列表的排序 (sort, sorted, reverse)

    这里需要说明一下 sort & sorted 的区别: sort 是对原列表进行排列,即原列表会改变; sorted 是返回一个排列后的列表作为返回值,即原列表不会改变,会返回一个排序后的新列表;

    heros = ['后羿', '库里', '路易吉','库里', '马里奥'] heros.sort() print(heros) # 输出:['后羿', '库里', '库里', '路易吉', '马里奥'] heros.sort(reverse=True) # 返序排列 print(heros) # 输出:['马里奥', '路易吉', '库里', '库里', '后羿'] a = sorted(heros) # 不会影响原列表,会返回一个排序后的新列表; print(a) # 输出:['后羿', '库里', '库里', '路易吉', '马里奥'] print(heros) # 输出:['马里奥', '路易吉', '库里', '库里', '后羿'] heros.reverse() # 翻转列表,与 heros.sort(reverse=True) 一样

    3. 列表的循环 (for ... in ... & for ... in enumerate(...) )

    3.1 for ... in ...

    可以用这种方法,循环列表中的所有元素;

    heros = ['后羿', '库里', '路易吉','库里', '马里奥'] for hero in heros: print(hero) # 输出:后羿 库里 路易吉 库里 马里奥

    3.2 for ... in enumerate(...)

    使用这种方法循环,可以同时获得元素的index(位置信息),举例如下:

    heros = ['后羿', '库里', '路易吉','库里', '马里奥'] for id,hero in enumerate(heros): print(id ,'--',hero) # 输出如下: # 0 -- 后羿 # 1 -- 库里 # 2 -- 路易吉 # 3 -- 库里 # 4 -- 马里奥

    4. 列表的复制

    4.1 不是复制的复制

    首先看以下代码:

    heros = ['后羿', '库里', '路易吉','库里', '马里奥'] copyheros = heros print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥'] heros[1] = '宙斯大魔王' print(heros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥'] print(copyheros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥']

    我们会有一个问题:为什么copyheros 的值会变?!?! 这似乎与我们的想法不一样。原因如下: 这里:copyheros = heros ,其实并没有复制,只是将 copyheros 指向了 heros,两个变量其实是共享一个内存地址的,所以当其中任何一个方法变化,另一个也会发生变化;图解如下: 所以,这里并没有任何的复制发生!

    4.2 浅复制

    如果以上的方法无法复制,那么我们需要怎样才能复制列表呢? 答案是:我们需要使用copy() 方法;

    heros = ['后羿', '库里', '路易吉','库里', '马里奥'] copyheros = heros.copy() print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥'] heros[1] = '宙斯大魔王' print(heros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥']

    从上面的例子,我们可以看到,更改heros 的元素后, copyheros 未发生变化;这里的copyheros 就是浅复制; 为什么这样的复制还叫浅复制呢?请继续看~

    4.3 深复制

    前面讲了浅复制,所谓浅复制,通俗的说:就是只能复制列表中的第一层; 总所周知,列表是可以嵌套的,例如: ['后羿', '库里', '路易吉', [ '猎人', '法师', '牧师' ] , '马里奥'],这里的列表中,出现了另一个列表[ '猎人', '法师', '牧师'], 当出现这种情况时,浅复制无法复制列表中的列表,参考下面的例一;因为:列表中的列表依然只共享一个内存空间; 想要一个完整的复制,需要使用copy模块中的 deepcopy(), 举例如例二:

    例一: 浅复制的例子:

    heros = ['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] copyheros = heros.copy() print(copyheros) # 输出:['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] heros[3][1] = '变身!!!' print(heros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥']

    例二:深复制的例子:

    import copy heros = ['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] copyheros = copy.deepcopy(heros) print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '法师', '牧师'], '马里奥'] heros[3][1] = '变身!!!' print(heros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '法师', '牧师'], '马里奥']

    这里我们可以得到以下结论:

    • 使用 = ,没有建立复制;
    • 浅复制只是建立了一层的复制体;
    • 深复制就是建立了一个完全独立的复制体;

    以上就是关于“详解Python列表的常用操作及应用是怎样的”的介绍了,感谢各位的阅读,如果大家想要了解更多相关的内容,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
    群英智防CDN,智能加速解决方案
    标签: Python列表操作

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

    猜你喜欢

    成为群英会员,开启智能安全云计算之旅

    立即注册
    专业资深工程师驻守
    7X24小时快速响应
    一站式无忧技术支持
    免费备案服务
    免费拨打  400-678-4567
    免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
    在线客服
    微信公众号
    返回顶部
    返回顶部 返回顶部
    在线客服
    在线客服