1.python中的容器数据类型概述
2.列表类型的异构性、有序性和本地可变性三大优势
2.列表的基本操作(增、删、改、分片索引)
3.列表的分片赋值与本地排序

【妹子说】今天开始学python啦,不过我们从哪里开始学起呢?

Python中有一种被称之为“容器”的数据类型,专门用来存放其他类型的对象,就好比小时候用的文具盒,里面放着铅笔、尺子、橡皮等等。很多人刚刚使用Python的时候,往往最先接触的就是这种容器对象,比如列表、字典、元组等等。它们功能全面,使用也很方便,可以解决很多实际问题。

那么,第一季我们就首先从这些好用、实用的python容器入手吧,第一个就介绍列表:

Python列表用起来非常灵活,它有三大优点,我们一个一个来说,聊完了这三个优点,基本上列表的基本操作我们就掌握了:

第一个优点:(https://jq.qq.com/?_wv=1027&k=UEbz4NcQ)

列表里想装啥就装啥,即:他可以包含不同种类、任意类型的对象,甚至可以嵌套列表,专业点的词儿叫:异构性;

我们看一个例子:

L1 = [1, 2, 3, 4, 5]
L2 = [1, 'spam', [2.3, 4]]
L3 = []

看这三个列表的初始化过程,异构性就搞清楚了,特别是L2列表,它同时包含了好几种不同的数据类型,甚至还嵌套了列表。

第二个优点:(https://jq.qq.com/?_wv=1027&k=UEbz4NcQ)

列表里装的元素都是有顺序的,可以按照位置序号获取单个元素,也可以用分片的方法来进行多个连续元素的获取,来个专业词汇,叫做:有序性。

按位置序号索引,例如L1[2]这种方式来访问列表中的元素只是最简单的一种,我来重点来说说分片操作这个独特用法,先看看这个例子:

L = [1,2,3,4,5,6,7,8]
print(L[1:3]) [2, 3]

我们从列表L中从左往右截取了一个片段。关于截取片段左右边界与索引值的对应关系,我们只需记住这么一个口诀“左闭右开”就OK了:

分片索引中第一个参数1表示左侧开始的索引1(从0开始计数),因此起始的元素就是整形数2,第二个参数3表示在右侧终止的索引值为3,即整形数4,但要记住他是不包含在截取的序列中的。

分片还有几种常见用法:

如果省略掉终止索引,就表示一直截取到末尾:

L = [1,2,3,4,5,6,7,8]
print(L[1:]) [2, 3, 4, 5, 6, 7, 8]

同理,如果省略掉起始索引,就表示从起始元素就开始截取:

L = [1,2,3,4,5,6,7,8]
print(L[:4]) [1, 2, 3, 4]

还可以用负索引,目前我们使用的都是正索引,即从左往右的索引值,最左侧的索引值为0,往右依次加1;还有一种负索引的表示法,即从右往左数,最右侧是-1,往左依次减1,即-2,-3以此类推:

L = [1,2,3,4,5,6,7,8]
print(L[3:-1]) [4, 5, 6, 7]

【妹子问】:那我想跳着截取呢?

那就用上第三个参数,步进值参数,这个默认是1,即1个挨着1个的取,如果我们想跳着截取,那就得专门设置这个步进参数了。

L = [1,2,3,4,5,6,7,8]
print(L[0::2]) [1, 3, 5, 7]

这时候【妹子问了一个很有内涵的问题】:我对截取出的分片进行修改,会影响到原始的列表吗?

那我们还是眼见为实:

L = [1,2,3,4,5,6,7,8]
b = L[3:-1]
print('before change:b={}'.format(b))
b[0]=111
print('after change:b={}'.format(b))
print('after change:L={}'.format(L)) before change:b=[4, 5, 6, 7]
after change:b=[111, 5, 6, 7]
after change:L=[1, 2, 3, 4, 5, 6, 7, 8]

很明显,对原始列表L进行分片切割后,产生了一个全新的列表。用变量b获取了L的分片后,实质是获取了L分片的一个新的独立拷贝。因此,你在列表b上做修改,是影响不了L的。

第三个优点:(https://jq.qq.com/?_wv=1027&k=UEbz4NcQ)

列表的大小和内容可以随意改变,在插入、删除、修改列表元素时,不需要建立一份新的列表拷贝,而是在原来的内存地址上直接修改列表对象。这个叫“本地可修改”

首先看增加新元素的三个使用场景:

L = [1,2,3,4]
L.append(5)
print(L) [1, 2, 3, 4, 5] L = [1,2,3,4]
L.insert(1,10)
print(L) [1, 10, 2, 3, 4] L = [1,2,3,4]
L.extend([11,22,33])
print(L) [1, 2, 3, 4, 11, 22, 33]

这三个用法有些不同,append方法只能在尾部加入;insert方法可在任意位置加入,比如上面例子,我们在列表的索引位置为1的地方加入元素10,如果指定的索引值大于序列的总长度,则自动加到末尾;extend方法则可以在尾部一次性加入多个元素

这时,【妹子自己操作了一把】:

L = [1,2,3,4,5]
L = L.insert(6,2)
print(L[2]) Traceback (most recent call last):
File "E:/12homework/12homework.py", line 3, in <module>
print(L[2])
TypeError: 'NoneType' object is not subscriptable

然后,就没有然后了。。。这里犯了一个常见的错误,因为我们说过插入是就地修改,而不是返回修改后的新列表。Insert方法的返回值是None,这么干换句话说,会彻底失去之前列表的引用,因为你把None值赋给了L,你就无法找到之前的列表了。append和extend方法也是这样。

删除,依据使用需求也有这几种使用场景:

最简单直接的,用remove方法,传入指定要删除的对象,注意:它也是在原列表上就地删除,返回值为None

L1 = ['aa','bb','cc']
L1.remove('aa')
print(L1) ['bb', 'cc']

这里注意,还有一个内置方法del,它额外的功能是可以删除列表中的一个分片

del L1[1:3]

还有一个pop方法,它在末端删除一个元素,并可以将删除的元素作为返回值返回给调用者

L1 = [1,2,3]
print(L1.pop())#末端删除一个元素,弹出删除的值
print(L1) 3
[1, 2]

【妹子问】那么元素修改,除了像下面这种直接用索引做元素修改的情况外,还有什么有趣的用法?

L = [4,5,6,7,8,9]
L[0] = 0

那必须要来点有意思的,主要就说分片赋值和本地排序这两个问题:

L = [4,5,6,7,8,9]
L[1:3] = ['aa','bb','cc','dd']
print(L) [4, 'aa', 'bb', 'cc', 'dd', 7, 8, 9]

分片赋值的本质是先在原列表上删除指定分片,然后在删除的位置插入新的列表,因此左右两边的长度可以不等。

本地排序非常方便,看看下面的例子就明白了。注意排序也是在本地修改,而不是将排好序的列表作为返回值返回。

L = [1,5,3,8,3,2,10]
L.sort()
print(L)
L.reverse()
print(L) [1, 2, 3, 3, 5, 8, 10]
[10, 8, 5, 3, 3, 2, 1]

【妹子说】果然呀,所谓三大优点讲完了,列表的基本用法算是弄明白了,那下次再讲讲字典和元组吧。

给妹子讲python-S01E01好用的列表的更多相关文章

  1. python学习第九讲,python中的数据类型,字符串的使用与介绍

    目录 python学习第九讲,python中的数据类型,字符串的使用与介绍 一丶字符串 1.字符串的定义 2.字符串的常见操作 3.字符串操作 len count index操作 4.判断空白字符,判 ...

  2. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...

  3. python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍

    目录 python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 2.元祖变量的定义 3.元祖变量的常用操作. 4.元祖的遍历 5.元祖的应用场景 p ...

  4. python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍

    目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...

  5. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

  6. python学习第一讲,python简介

    目录 python学习第一讲,python简介 一丶python简介 1.解释型语言与编译型语言 2.python的特点 3.python的优缺点 二丶第一个python程序 1.python源程序概 ...

  7. python基础一数据类型之列表

    摘要: python基础一中写到列表,那么这篇主要讲列表. 1,定义列表 2,列表.元祖.字符串都属于序列,都可以用用索引和切片. 3,列表的方法 1,定义列表 list1 = ['a','b',1, ...

  8. Python内建的对象列表

    Python内建的对象列表 刚写Python肯定会遇到这样的情况,想写些什么,但又不知从何写起... 在我看来问题在于我们不知道有什么东东可以拿来玩,这里列出Python的内建对象,稍微归类了一下,多 ...

  9. python数据类型详解及列表字典集合推导式详解

    一.运算符 Python语言支持以下类型的运算符: 算术运算符 如: #!/usr/bin/env python # -*- coding:utf-8 -*- a = 5 b = 6 print(a ...

  10. 【python基础】之list列表

    python提供了一个被称为列表的数据类型,他可以存储一个有序的元素集合. 记住:一个列表可以存储任意大小的数据集合.列表是可变对象,有别于字符串str类,str类是不可变对象. 1.创建一个列表 l ...

随机推荐

  1. Python实现双X轴双Y轴绘图

    诈尸人口回归.这一年忙着灌水忙到头都掉了,最近在女朋友的提醒下终于想起来博客的账号密码,正好今天灌水的时候需要画一个双X轴双Y轴的图,研究了两小时终于用Py实现了.找资料的过程中没有发现有系统的文章, ...

  2. 【HCIE】ipv6之6to4隧道如何计算48位前缀地址

    6to4隧道支持router-router,host-router,router-host,host-host 采用专用6to4地址,前缀为2002::/16 其中如何结合ipv4地址? 2002:i ...

  3. spring-data-jpa操作数据库

    1.spring-data-jpa是spring对hibernate的整合 2.spring boot工程在实体类添加注解.添加两个依赖.写配置文件,可以自动生成数据库表 实体类: @Entity / ...

  4. XCTF练习题---MISC---Get-the-key.txt

    XCTF练习题---MISC---Get-the-key.txt flag:SECCON{@]NL7n+-s75FrET]vU=7Z} 解题步骤: 1.观察题目,下载附件 2.拿到手以后直接惊呆,挺大 ...

  5. 从同步函数 hello-world-dotnet 开始探索OpenFunction

    OpenFunction[1] 是一个现代化的云原生 FaaS(函数即服务)框架,它引入了很多非常优秀的开源技术栈,包括 Knative.Tekton.Shipwright.Dapr.KEDA 等,这 ...

  6. cookie、sessionStorage、localStorage的区别?

    数据存储位置 三者都是存储在游览器本地的 区别在于cookie是服务器端写入的,而sessionStorage.localStorage是由前端写入的 生命周期 cookie的生命周期是由服务器端写入 ...

  7. Linux 多网卡bonding

    bonding 将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡.直接给两块网卡设置同一IP 地址是不可以的.通过 bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的 ...

  8. 漫谈 HTTP 连接

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 本文首先会 HTTP 的特点和优缺点,然后会详细介绍 HTTP 长连接和短连接的连接管理,通过 ...

  9. 817. Linked List Components - LeetCode

    Question 817. Linked List Components Solution 题目大意:给一个链表和该链表元素组成的一个子数组,求子数组在链表中组成多少个片段,每个片段中可有多个连续的元 ...

  10. 使用Gitbook做笔记

    一.安装 https://github.com/GitbookIO/gitbook/blob/master/docs/setup.md # 通过npm全局安装 npm install gitbook- ...