Python第五章-内置数据结构02-列表
Python 内置的数据结构
二、列表(list)
想一想:
前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢?
定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗?
答:
列表
列表介绍
list
python 中一般把它翻译为列表.
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 支持in
和not 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 总结
通过以上的学习,我们可以看到str
和list
有许多通用的特点:都支持索引和切片
由于字符串是不可变对象,所以字符串没有删除的操作。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-列表的更多相关文章
- Python第五章-内置数据结构05-集合
Python内置数据结构 五.集合(set) python 还提供了另外一种数据类型:set. set用于包含一组无序的不重复对象.所以set中的元素有点像dict的key.这是set与 list的最 ...
- Python第五章-内置数据结构01-字符串
Python 内置的数据结构 到目前为止,我们如果想保存一些数据,只能通过变量.但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实. 我们需要能够保存大量数据的类似变量的东东,这种 ...
- Python第五章-内置数据结构04-字典
Python 内置的数据结构 四.字典(dict) 字典也是 python 提供给我们的又一个非常重要且有用的数据结构. 字典在别的语言中有时叫关联数组.关联内存.Map等. 字典中存储的是一系列的k ...
- Python第五章-内置数据结构03-元组
Python 内置的数据结构 三.元组(tuple) python 作为一个发展中的语言,也提供了其他的一些数据类型. tuple也是 python 中一个标准的序列类型. 他的一些操作和str和li ...
- Python的4个内置数据结构
Python提供了4个内置数据结构(内置指可以直接使用,无需先导入),可以保存任何对象集合,分别是列表.元组.字典和集合. 一.列表有序的可变对象集合. 1.列表的创建例子 list1 = []lis ...
- python的四种内置数据结构
对于每种编程语言一般都会规定一些容器来保存某些数据,就像java的集合和数组一样python也同样有这样的结构 而对于python他有四个这样的内置容器来存储数据,他们都是python语言的一部分可以 ...
- Python内置数据结构之列表list
1. Python的数据类型简介 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数.字符乃至其他数据结构)集合.在Python中,最基本的数据结构为序列(sequence). Python内 ...
- Python基础语法-内置数据结构之列表
列表的一些特点: 列表是最常用的线性数据结构 list是一系列元素的有序组合 list是可变的 列表的操作, 增:append.extend.insert 删:clear.pop.remove 改:r ...
- [PY3]——内置数据结构(1)——列表及其常用操作
列表及其常用操作_xmind图 about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...
随机推荐
- Python sys.path详解
如何将路径“永久"添加到sys.path? sys.path是python的搜索模块的路径集,是一个list ['', 'C:\\WINDOWS\\system32\\python26.zi ...
- 使用HtmlAgilityPack和ScrapySharp抓取网页数据遇到的几个问题解决方法——格式编码问题
需要用到对应市区县街道居委会的区域编码,于是找到统计局的网页,对这些数据进行抓取,用到了HtmlAgilityPack和ScrapySharp,由于也是第一次从网页抓取数据,所以对于HtmlAgili ...
- 50-Python2和3字符编码的区别
目录 Python2和3字符编码的区别 python2 python3 Python2和3字符编码的区别 区别点 python2 python3 print 是一个语法结构 是一个函数,print(' ...
- .NET Core 基于Websocket的在线聊天室
什么是Websocket 我们在传统的客户端程序要实现实时双工通讯第一想到的技术就是socket通讯,但是在web体系是用不了socket通讯技术的,因为http被设计成无状态,每次跟服务器通讯完成后 ...
- 【转】css样式自动换行(强制换行)
原文链接:http://blog.csdn.net/ye987987... 自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,挺让人头疼,下面介绍的是CSS如何实现换行的 ...
- 2020年,如何成为一名 iOS 开发高手!
2020年对应程序员来说,是一个多灾的年份,很多公司都进行了不同比例的优化和裁员.等疫情得到控制后,将会是找工作的高峰期,从去年的面试经历来看,现在只会单纯写业务代码的人找工作特别难,很多大厂的面试官 ...
- vue+webpack工程环境搭建
使用Vue-cli脚手架(属于vue全家桶)快速构建一个项目: [1]首先需要安装好node.js; [2]安装webpack,指令$npm install -g webpack; //如果之前有安装 ...
- R时间序列分析实例
一.作业要求 自选时间序列完成时间序列的建模过程,要求序列的长度>=100. 报告要求以下几部分内容: 数据的描述:数据来源.期间.数据的定义.数据长度. 作时间序列图并进行简单评价. 进行时间 ...
- redis作为消息队列的原理
Redis队列功能介绍 List 转:https://blog.csdn.net/cestlavieqiang/article/details/84197736 常用命令: Blpop删除,并获得该列 ...
- JsonFormat 日期少了8个小时?还我
JsonFormat 后日期少了8个小时什么鬼? 前言 今天测试的时候发现时间对不上,比数据库里的时间少了8个小时?测试小姐姐一顿狂轰乱炸,一点都不温柔. 什么鬼?哪里出了问题?数据库显示的是下面