Python基础学习之列表操作

文章目录

  • Python基础学习之列表操作
    • 1. 列表的增,删,改,查
      • 1.1 列表的增加,常用的方法有:append, extent, incert
      • 1.2 列表的删除,常用的方法有:pop, clear , remove
      • 1.3 列表的修改,直接对制定元素赋值即可;
      • 1.4 列表的查询,常用方法有 index, count, in
    • 2. 列表的排序 (sort, sorted, reverse)
    • 3. 列表的循环 (for ... in ... & for ... in enumerate(...) )
      • 3.1 for ... in ...
      • 3.2 for ... in enumerate(...)
    • 4. 列表的复制
      • 4.1 不是复制的复制
      • 4.2 浅复制
      • 4.3 深复制

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

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

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

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

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

  1. index() 传入列表的元素,可以返回元素在列表中的位置
heros = ['后羿', '库里', '路易吉', '马里奥']
a = heros.index('库里')
print(a)  # 返回元素的位置,输出:1
b = heros.index('林克')   # 列表中没有值,会报错;error: '林克' is not in list
  1. count() 可以查询列表中的某个值的个数
heros = ['后羿', '库里', '路易吉','库里', '马里奥']
a = heros.count('库里')
print(a)  # 返回元素的位置,输出:2
  1. 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基础学习之列表操作相关推荐

  1. Python基础学习之字典操作

    Python基础学习之字典操作 文章目录 Python基础学习之字典操作 1. 字典的创建 1.1 直接赋值法 1.2 关键字赋值法 1.3 列表转化法 1.4 元素增加法 1.5 元组转化法 1.6 ...

  2. Python基础学习3——列表

    基础概念 列表是由一系列按特定顺序排列的元素组成,与C语言中的数组的概念十分相似. 我们可以将列表想象成一个长条形状的月饼盒子,月饼盒子中有很多月饼,被格栏一个个分开.每一个月饼就是一个元素,而这个月 ...

  3. 【Python基础学习】基本数据结构:列表、元组、栈、字典、集合与队列

    [Python基础学习]基本数据结构:列表.元组.栈.字典.集合与队列 Python的基本数据结构中,包含了列表.元组等一系列数组式数据结构,但各个结构各有不同.因此单独列出来,分析相同与不同 列表( ...

  4. 萌新向Python数据分析及数据挖掘 第一章 Python基础 第三节 列表简介 第四节 操作列表...

    第一章 Python基础 第三节 列表简介 列表是是处理一组有序项目的数据结构,即可以在一个列表中存储一个序列的项目.列表中的元素包括在方括号([])中,每个元素之间用逗号分割.列表是可变的数据类型, ...

  5. python开发需要掌握哪些知识-Python基础学习需要掌握哪些知识

    1.1Python的对象 python的内置对象类型有很多,包括数字,字符串,列表,集合,元组,字典等等,在Python中,一切皆对象 pickle腌制--在Python中,如果有一些对象需要持久性存 ...

  6. Python基础学习笔记之(二)

    Python基础学习笔记之(二) zouxy09@qq.com http://blog.csdn.net/zouxy09 六.包与模块 1.模块module Python中每一个.py脚本定义一个模块 ...

  7. Python基础学习笔记之(一)

    Python基础学习笔记之(一) zouxy09@qq.com http://blog.csdn.net/zouxy09 前段时间参加微软的windows Azure云计算的一个小培训,其中Pytho ...

  8. Python基础学习备忘录上

    Python基础学习 备忘录上 Python语法 1.1 输出 1.1.1 输出换行的更改 1.1.2 输出整型 1.1.3 输出字符串 1.1.4 字符串拼接与多行输出 1.1.5 输入输出类型转换 ...

  9. python | 基础学习(一)了解Bug、pycharm、变量、程序的三大流程(顺序、if、while)、运算符、快捷键

    文章目录 一.引言 1.python的起源 2.解释器 3.python的设计目标 4.python的特点 二.python 1.了解BUG 2.python的三种运行方式 ①解释器python/py ...

最新文章

  1. TensorFlow编程结构
  2. redis和Memcached的区别,都什么时候使用?
  3. Oracle 19c: RAC 集群技术的坚持与放弃(含PPT下载)
  4. java long更大_java – 比Long.MAX_VALUE大的长度
  5. js清理cookie
  6. 用css实现图片翻转
  7. Android Studio Library生成jar包问题总结
  8. 手机号正则和邮箱正则,常用正则解释
  9. MinGW安装及介绍
  10. pip卸载pillow时的报错解决
  11. 2021-10-11电子天平期间核查和日常核查管理方法
  12. with admin option和with grant option的区别与用法
  13. 3993: [SDOI2015]星际战争
  14. 异常:java lang AbstractMethodError
  15. 面试记录:光大银行北京分行金融科技岗实习
  16. 资源网站模板Emlog程序zytheme模板
  17. 如何计算系统用户并发数,系统最大并发数
  18. 怎么用python编写程序计算标准差_自学生信Python(第五天)|如何计算标准差?...
  19. 量子信息革命引领未来科技革命 | 科技导报
  20. input type=number 禁止输入E

热门文章

  1. 物业管理系统 ERP系统 下载
  2. opencv HoughLine 理解
  3. 基于canvas实现温度热力图,温度云图(一)--实现温度分布图
  4. MYSQL||报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated
  5. 信息安全——维吉尼亚密码算法(C++实现)
  6. 为什么现在的会员制仓储店都集体爆发了?
  7. 过检大马下载webshell,360,安全狗。。。
  8. 冗余备份Smart Link技术,保护及控制VLAN
  9. SpringToolSuite4安装
  10. 【网络通信 -- 直播】网络通信协议简介 -- SSL/TLS 与 DTLS