小白学 Python(10):基础数据结构(列表)(下)
人生苦短,我选Python
前文传送门
列表切片
一说到列表切片不知道各位同学有没有想起来前面我们讲过的字符串切片,没想起来的同学为自己的记忆默哀 3 秒钟吧。
开个玩笑:)可以返回去看看之前的文章。
列表切片是指将列表其中的一部分切出来。
语法: list[起始索引:终止索引:步长间隔]
注意: 这里的终止索引和字符串切片是一样的,并不会取到。
下面直接上代码,解析已经添加在注释中。
其实我就是懒,不想一条一条拆开写了,来打我呀~~~
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 省略步长时默认为 1
print(list1[3:8])
# 步长为 2
print(list1[3:8:2])
# 从索引 3 开始取到最后
print(list1[3:])
# 从头开始取,取到索引 8 ,并且索引 8 娶不到
print(list1[:8])
# 取所有,步长为 3
print(list1[::3])
# 从索引 1 开始,取到倒数第 2 个,并且倒数第 2 个 取不到
print(list1[1:-2])
# 取所有
print(list1[:])
# 取逆序列表
print(list1[::-1])
# 取逆序,并且步长为 2
print(list1[8:1:-2])
执行结果如下:
[3, 4, 5, 6, 7]
[3, 5, 7]
[3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 3, 6, 9]
[1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[8, 6, 4, 2]
列表常用方法
我们这里分别演示一下:
list.append(obj)
在列表末尾添加新的对象
list1.append("Python")
print(list1)
结果如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python']
list.count(obj)
统计某个元素在列表中出现的次数
list2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2.append("Python")
list2.append("Python")
list2.append("Python")
list2.append(1)
print(list2.count("Python"))
print(list2.count(1))
结果如下:
3
2
我们这里分别统计了字符串 "Python"
和数字 1
出现的次数。
list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list1.extend(list2)
print(list1)
结果如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]
可以看到 list1 在经过 list2 的扩展后,同时含有了 list1 和 list2 的所有数据。
extend 和 append 非常像,但是 extend 一次可以添加一个列表,而 append 一次只能添加一个元素。
list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
print(list1.index("Python"))
结果如下:
10
list.insert(index, obj)
将对象插入列表
index 是插入的索引值, obj 是要插入的元素。
list1.insert(0, "Hello")
print(list1)
list3 = [0, 1, 2]
list4 = [2, 2]
list3.insert(1, list4)
print(list3)
结果如下:
['Hello', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]
[0, [2, 2], 1, 2]
当然插入时可以是一个单独的元素,也可以是一个列表。
list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list3.pop()
print(list3)
list3.pop(1)
print(list3)
结果如下:
[0, [2, 2], 1]
[0, 1]
同样在移除索引的时候,可以移除一个元素,也可以移除一个列表。
list.remove(obj)
移除列表中某个值的第一个匹配项
list5 = [1, 2, 3, 4, 4, 5]
list5.remove(4)
print(list5)
结果如下:
[1, 2, 3, 4, 5]
list.reverse()
反向列表中元素
list5.reverse()
print(list5)
结果如下:
[5, 4, 3, 2, 1]
虽然我们刚才用步长为 -1 的形式同样做到了列表逆序,但是这两个操作是不一样的。
list5 = [1, 2, 3, 4, 4, 5]
list5.remove(4)
print(list5)
print(id(list5))
list5.reverse()
print(list5)
print(id(list5))
print(id(list5[::-1]))
结果如下:
[1, 2, 3, 4, 5]
2629333420040
[5, 4, 3, 2, 1]
2629333420040
2629333420104
各位同学看明白了,通过步长获得的逆序列表实际上是一个新的列表,在内存的地址发生了变动,而通过 list.reverse()
打印的逆序列表还是这个列表本身,它的内存地址并未发生改变。
list.sort( key=None, reverse=False)
对原列表进行排序
list6 = [2, 5, 1, 9, 6, 3]
list6.sort()
print(list6)
list6.sort(reverse=True)
print(list6)
结果如下:
[1, 2, 3, 5, 6, 9]
[9, 6, 5, 3, 2, 1]
怎么样,对列表进行正序和逆序排序是不是很简单。
后面还有两个方法 list.clear()
(清空列表) 和 list.copy()
(复制列表)我就不做演示,大家可以自己动手尝试一下,有不清楚的可以在公众号后台留言问我。
示例代码
本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。
小白学 Python(10):基础数据结构(列表)(下)的更多相关文章
- 小白学 Python(9):基础数据结构(列表)(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(13):基础数据结构(字典)(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(15):基础数据结构(集合)(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(11):基础数据结构(元组)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(12):基础数据结构(字典)(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(14):基础数据结构(集合)(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(17):基础数据类型(函数)(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(24):Excel 基础操作(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(6):基础运算符(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
随机推荐
- java工具方法
仅记录所遇到并使用的工具方法. 1.md5加密 /** * 对传入的字符串数据进行MD5加密 * @param source 字符串数据 * @param code 字符编码 * @return 加密 ...
- Mysql学习笔记整理之索引
索引的概念: 索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序 为什么要用索引? 索引能极大的减少存储引擎需要扫描的数据量 索引可以把随机IO变成顺序IO 索引可以帮助我们进行分 ...
- C语言入门-数据类型
一.C语言的类型 整数:char.short.int.long.longlong 浮点型:float.double.long double 逻辑:bool 指针 自定义类型 类型有何不同 类型名称:i ...
- Android Studio [相对布局RelativeLayout]
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- helm部署Filebeat + ELK
helm部署Filebeat + ELK 系统架构图: 1) 多个Filebeat在各个Node进行日志采集,然后上传至Logstash 2) 多个Logstash节点并行(负载均衡,不作为集群),对 ...
- Maven 梳理 - maven新建web项目提示"javax.servlet.http.HttpServlet" was not found on the Java Build Path
方法一: <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api&l ...
- 使用tomcat7发布war项目启动org_apache_tomcat_websocket报错
在使用tomcat7发布项目时(项目是用springboot 2.1.4.RELEASE版本开发的) 换成tomcat8就可以正常发布了,网上说tomcat7不支持servlet3.1,升级到spri ...
- 使用Hexo开源博客系统,轻松搭建你的个人博客(1)
Hexo 是一个轻量级.简洁.高效且高逼格的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.同时有着丰富的主题,官网或者GitHub都可 ...
- Hyperion: Building the Largest In memory Search Tree
Introduction 索引在数据管理中起到很重要的作用,很多索引结构都会采用访问速度快而且内存消耗少的trie树,但一般常见的trie树索引结构都强调效率而忽视内存的效率,他们的效率虽然高,但内存 ...
- asp.net编译中出现 数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf' 已存在。请选择其他数据库名称。
关于asp.net编译中出现数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf ...