Python 内置的数据结构

二、列表(list)

想一想:

前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢?

定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗?

答:

列表

列表介绍

listpython 中一般把它翻译为列表.

list 是 python 中用途最广的一种数据结构。

list 可以存储多个数据,这些数据用 [ ] 包裹,各个数据之间用 , 分割。

list中的元素可以是任意类型的,但是实际使用的时,一个list 中一般只存储一种数据类型的数据。

list 中可以存储的元素是有顺序的,且允许重复。

list 中的元素也可以更改。

list的索引从0开始。索引就是数据在列表中的位置编号,索引又可以被称为下标。从列表中取值时,如果超出索引范围,程序会报错


2.1 声明 list和使用

nums = [10, 20, 40, 30, 25]
print(nums)
print(nums[0]) # 10

内置函数 len 也可以获取到 list 的长度

获取列表中某一个元素的数值

列表名[index]

​ index:表示列表中元素的下标(或者理解为位置,从0开始。到长度-1。不能越界)

2.2 列表的循环遍历

使用for ...in

for 变量名 in 列表名:
print(变量名) # 就是打印输出列表中的每一个元素

示例代码:

name_list = ["张三","李四","王五","王二狗"]
for name in name_list:
print("姓名:%s " % name)

使用while循环

示例代码:

name_list = ["张三","李四","王五","王二狗"]
index = 0
while index < len(name_list):
print("姓名: %s " % name_list[index])

2.3 列表的常用操作

2.3.1 列表中元素的增删改

修改list 中的元素

list 和字符串不太一样。字符串是不可变的。 而list 是可变的。

我们可以通过索引去更改指定索引位置的元素的值

nums1 = [10, 20, 40, 30, 25]
nums1[2] = 200
print(nums1)

list中添加元素和从 list 中删除元素

list.append(value)list 的末尾添加元素

list.pop([index]) 把指定索引位置的元素删除. 如果不传入参数就是删除最后一个元素

list.insert(index, ele) 把元素 ele 插入到指定的 index 位置。原来的元素会自动右移动

nums1 = [10, 20, 40, 30, 25]
nums1.append(1000)
print(nums1)
nums1.pop(0)
print(nums1)
nums1.insert(2, 2000)
print(nums1)

还有一种删除元素的办法:使用 del 运算符

del关键字本质上是用来将一个变量从内存中删除的。

nums1 = [10, 20, 40, 30, 25]
del nums1[0]
print(nums1)
del nums1[0:2]
print(nums1)

通过切片也可以修改 list 中的元素,甚至清空 list

nums1 = [10, 20, 40, 30, 25]
nums1[:2] = ["A", "B", "C"] # 下标0、1的元素用 ["A", "B", "C"] 去替换
print(nums1)
nums1[:] = [] # clear list
print(nums1)

extend

通过extend可以将另一个集合中的元素逐一添加到列表中

a = [1, 2]
b = [3, 4]
a.append(b) # [1, 2, [3, 4]]
a.extend(b) # [1, 2, [3, 4], 3, 4]

面试题:+= 对于列表的作用

针对于列表:a += b。不是做相加再赋值的操作。本质就是a.extend(b)


2.3.2 连接 list

list 可以像字符串那样通过 + 连接。得到的新的 list 包含了参与运算的两个 list 中所有元素

nums1 = [10, 20, 40, 30, 25]
nums2 = [100, 200]
num12 = nums1 + nums2
print(num12)

2.3.3 使用索引和切片

和字符串一样,list 也支持索引读取和切片。其实内置的序列类型都支持这样的操作

nums = [10, 20, 40, 30, 25]
print(nums[1])
print(nums[-3])
print(nums[:3])
print(nums[1:])

注意:

​ 所有的切片操作都是返回一个新的 list ,所以我们可以通过切片非常轻松的 copy 一个list

nums = [10, 20, 40, 30, 25]
new_nums = nums[:] # 复制 list nums
print(new_nums)

注意:

这里的复制是浅复制. 其实以后你会发现在, 几乎所有的复制都是浅复制, 如果要深复制, 需要自己递归实现.

2.3.4 支持innot in

nums1 = [10, 20, 40, 30, 25]
print(20 in nums1) # True
print(20 not in nums1) # False

2.4 嵌套(nested)的list

嵌套的意思是,列表中的元素也可以是列表。

因为列表中的元素可以是任意类型,所以嵌套也是很容易理解的。

nums = [[1, 2], [3, 4], [20, 10]]
print(nums) print(nums[0][0])
print(nums[1][1])

2.5 列表推导(List Comprehensions)

列表推导,有人也叫列表包含。

他提供了一种更加简洁的方式去创建列表。

列表推导的语法:

[表达式 for item in 序列]

说明:

会对序列中的每个 item 执行表达式, 然后把值存入到一个新的列表中.

举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):

示例代码1:

nums = list(range(1, 11))
print(nums) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

示例代码2:求一个数的3次方

nums = [x**3 for x in range(10)]
print(nums)

上面的代码相当于:

nums = []
for x in range(10):
nums.append(x ** 3)

示例代码3:

列表推导的时候也可以添加条件:求偶数的平方

nums = [x ** 2 for x in range(20) if x % 2 == 0]
print(nums)

列表推导也支持for 的嵌套

示例代码4:

s1 = ["a", "b", "c"]
s2 = [20, 30] s3 = [x + str(y) for x in s1 for y in s2]
print(s3)

注意:

得到的列表的长度是一种笛卡尔积. 也就是说新列表的长度是原列表的长度的乘积.


2.6 总结

通过以上的学习,我们可以看到strlist有许多通用的特点:都支持索引和切片

由于字符串是不可变对象,所以字符串没有删除的操作。list是可变的,所以提供了删除的操作。

序号 分类 关键字/函数/方法 说明
01 增加 列表.insert(索引,数据) 在指定位置插入数据
列表.append(数据) 在末尾追加数据
列表.extend(列表2) 将列表2的数据追加到列表
02 修改 列表[索引] = 新值 修改指定索引的数据
03 删除 del 列表[索引] 删除指定索引的数据
列表.remove[数据] 删除第一个出现的指定数据
列表.pop 删除末尾数据
列表.pop(索引) 删除指定索引数据
列表.clear 清空列表
04 统计 len(列表) 列表长度
列表.count(数据) 数据在列表中出现的次数
05 排序 列表.sort() 升序排序
列表.sort(reverse=True) 降序排序
列表.reverse() 逆序,反转
06 切片 列表[start:end]

Python第五章-内置数据结构02-列表的更多相关文章

  1. Python第五章-内置数据结构05-集合

    Python内置数据结构 五.集合(set) python 还提供了另外一种数据类型:set. set用于包含一组无序的不重复对象.所以set中的元素有点像dict的key.这是set与 list的最 ...

  2. Python第五章-内置数据结构01-字符串

    Python 内置的数据结构 ​ 到目前为止,我们如果想保存一些数据,只能通过变量.但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实. ​ 我们需要能够保存大量数据的类似变量的东东,这种 ...

  3. Python第五章-内置数据结构04-字典

    Python 内置的数据结构 四.字典(dict) 字典也是 python 提供给我们的又一个非常重要且有用的数据结构. 字典在别的语言中有时叫关联数组.关联内存.Map等. 字典中存储的是一系列的k ...

  4. Python第五章-内置数据结构03-元组

    Python 内置的数据结构 三.元组(tuple) python 作为一个发展中的语言,也提供了其他的一些数据类型. tuple也是 python 中一个标准的序列类型. 他的一些操作和str和li ...

  5. Python的4个内置数据结构

    Python提供了4个内置数据结构(内置指可以直接使用,无需先导入),可以保存任何对象集合,分别是列表.元组.字典和集合. 一.列表有序的可变对象集合. 1.列表的创建例子 list1 = []lis ...

  6. python的四种内置数据结构

    对于每种编程语言一般都会规定一些容器来保存某些数据,就像java的集合和数组一样python也同样有这样的结构 而对于python他有四个这样的内置容器来存储数据,他们都是python语言的一部分可以 ...

  7. Python内置数据结构之列表list

    1. Python的数据类型简介 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数.字符乃至其他数据结构)集合.在Python中,最基本的数据结构为序列(sequence). Python内 ...

  8. Python基础语法-内置数据结构之列表

    列表的一些特点: 列表是最常用的线性数据结构 list是一系列元素的有序组合 list是可变的 列表的操作, 增:append.extend.insert 删:clear.pop.remove 改:r ...

  9. [PY3]——内置数据结构(1)——列表及其常用操作

    列表及其常用操作_xmind图         about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...

随机推荐

  1. 2020年JAVA大厂笔经面经

    个人简介 ​ Java后台开发方向. 非计算机专业硕士,专业涉及到一些开发. 实验室项目主要是Java Web系统,挖掘小亮点. 无实习经验. 闲话唠嗑 ​ 回顾这几个月,宛若梦一场. 一开始心态不好 ...

  2. Unity中使用C#的null条件运算符?.的注意事项

    Introduction: 在C#6及以上版本中,加入了一项特别好用的运算符:Null条件运算符?.和?[]可以用来方便的执行判空操作,当运算符左侧操作数不为null时才会进行访问操作,否则直接返回n ...

  3. CSS过渡、动画及变形的基本属性与运用

    [逆战班] 动画可以让一个元素具有动态的效果,这个过程是使元素从一种样式变成另一个样式的过程.我们可以通过设置关键帧的方法来控制动画在某个时间节点的运动方式.通常设置多个节点来实现复杂的动画效果.0% ...

  4. PyMuPDF库(处理PDF)

    昨天在公司需要把一份PDF格式认证表转换为图片JPEG格式,所以在网上查询了一些与此相关的python库,最后看网上大多都是使用Wand和PyMuPDF,在安装了Wand库后,导入相应的模块后报错了, ...

  5. VM安装Linux Centos7.0虚拟机

    一.准备工作 1.安装VMware 官网https://www.vmware.com/cn.html 2.准备centos7的镜像文件 官网下载链接:http://isoredirect.centos ...

  6. ODI学习资料

    ODI12.2.1.4入门指南:https://docs.oracle.com/en/middleware/fusion-middleware/data-integrator/12.2.1.4/ind ...

  7. Linux命令学习神器!命令看不懂直接给你解释!

    大家都知道,Linux 系统有非常多的命令,而且每个命令又有非常多的用法,想要全部记住所有命令的所有用法,恐怕是一件不可能完成的任务. 一般情况下,我们学习一个命令时,要么直接百度去搜索它的用法,要么 ...

  8. 使用EventBus + Redis发布订阅模式提升业务执行性能

    前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...

  9. js对象中关于this关键字的作用

    前两天在前端群看到群友问的一个问题,问题如下: var Name = 'window'; var obj = { Name:'obj字符串', getName:function(){ console. ...

  10. Python基础-检测密码,一些网站会给密码强加一些规则。

    输入一个字符串,检测是否是合法的密码:1)密码必须包含8个字符2)密码只能包含英文字母和数字3)密码至少包含两个数字 首先我讲一下用到的方法 s为字符串 len(s) 求出字符串的长度. list(s ...