从零开始学Python系列课程第17课:容器型数据类型之列表(上)

前言

列表算是 Python 中比较常用的一种容器型数据类型,那么什么是列表,列表有什么样的作用致使它在 Python 中这么受欢迎呢?这便是接下来我们要一起讨论的问题。
在不久之前我们讲过变量,我们将数据使用变量保存,但是如果涉及到多组数据仍然源源不断的创建变量进行保存,我们的代码就显得过于臃肿。那么有没有可能一个变量能够保存多个数据呢,答案是肯定的,我们可以先将数据依次放入容器中(这样一个保存有多组数据的容器可以被理解为是一个数据集合体的),再用变量保存这个容器,等需要用到数据时,从容器中提取出即可。

一、列表创建

列表,是一个把中括号[]作为标志、使用逗号分隔元素的容器型数据类型,容器意味着其有存储数据的功能,并且列表中可以存储任意类型的可重复元素。例如这样一个列表:

list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]

如果想要创建一个列表,我们可以使用两种方法:第一种方法我们其实已经进行了编写,就是上述所举例的列表,可以直接遵循规则使用 [] 进行列表创建;另一种方法就是使用 Python 内置的 list 方法创建空列表或直接将其他容器变为列表,这其实是一种构造器语法。关于构造器语法,我们后续进行介绍。

list_2 = list()
# []

list_3 = list('abcde')
# ['a', 'b', 'c', 'd', 'e']

二、列表中数据的提取

我们将数据存放到了列表中,那么应该如何再把数据取出来呢,可以使用索引、切片还有循环遍历。

1. 索引(下标)

列表,是一个有序的容器型数据类型,其中的每个元素都有自己指定的位置。
正向下标.png
负向下标.png
如图所示,索引(也可以叫做下标)分为正向索引反向索引。如果是正向索引,从左向右索引从0开始递增;如果是反向索引,从右向左索引从-1开始递减。我们可以通过索引得到有序容器中指定位置的元素,但是要注意,千万不要写超出范围的索引。
语法:有序容器[索引]

list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]

# 问题一:获取列表中的第一个True
print(list_1[3], list_1[-4])

# 问题二:写一个超出范围的索引
print(list_1[100])
# 报错:IndexError: list index out of range

2. 切片

切片可以理解为是索引的拓展功能。切片能够从有序容器1中截取出一部分元素组成与有序容器1同类型的有序容器2
切片.png
语法:有序容器[start: end: step]

  • 切片为左闭右开区间 [start, end)
  • start 为开始截取的元素的索引,如果没写,默认从开头第一个元素开始截取。
  • end 为停止截取元素的索引,end 在开区间的位置,所以取不到,如果没写,默认截取到最后一个元素。
  • step 为步长,如果不写默认为1,通过 step 可以计算出下一个元素,下一个被截取元素的索引 = 当前被截取元素的索引 + step
  • step 必须为整数,如果 step ≥ 1,start 代表的元素必须在 end 代表的元素左边;如果 step ≤ -1,start 代表的元素必须在 end 代表的元素的右边。
  • 在切片中,正向索引和负向索引可以一起使用。
games = ['王者荣耀', '和平精英', '奇迹暖暖', '英雄联盟', '光遇', '炉石传说']
# 1. 得到['王者荣耀', '和平精英']
print(games[0: 2])
print(games[: 2: 1])

# 2. 得到['王者荣耀', '奇迹暖暖', '光遇']
print(games[: 5: 2])
print(games[: -1: 2])
print(games[:: 2])

# 3. 得到['炉石传说', '光遇', '英雄联盟', '奇迹暖暖', '和平精英', '王者荣耀']
print(games[::-1])

# 4. 得到['英雄联盟', '和平精英']
print(games[-3: -6: -2])
print(games[3: 0: -2 ])

3. 循环遍历

列表是容器型数据类型,我们在讲述循环结构时讲过,for-in 循环可以从容器中获取数据,所以通过循环遍历可以提取到列表中的每个元素,对列表的循环遍历可以分为两种,一种是直接遍历,另一种是间接遍历。

  • 直接遍历:直接拿到每一个元素。
list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]
for i in list_1:
    print(i)

# 1
# 2
# 3
# True
# False
# True
# [2, 4, 6]
  • 间接遍历:列表中每个元素都有自己的索引,我们可以通过 len() 获取到列表的长度,从而将列表中每个元素的索引构造出来,间接性的拿到元素。
list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]
for i in range(0, len(list_1)):
    print(f'{i}-->{list_1[i]}')

# 0-->1
# 1-->2
# 2-->3
# 3-->True
# 4-->False
# 5-->True
# 6-->[2, 4, 6]

大家先把以上内容进行梳理,此部分内容在后续学习中会经常用到,希望大家能时常温故知新,我们先学理论,再进行实操训练。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/277680.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构和算法】独一无二的出现次数

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 哈希类算法题注意事项 2.2 方法一:判断长度 2.3 方法二: set 判断 2.4 方法…

DG报错ORA-01111、ORA-01110、ORA-01157备库不同步

刚同步好没多久的dg备库,过两天查看同步状态发现备库数据不同步,重新开启同步也不能正常同步。 查看alert日志,查看报错如下: MRP0: Background Media Recovery terminated with error 1111 Errors in file D:\APP\ADMINISTRATOR…

红队打靶练习:DIGITALWORLD.LOCAL: FALL

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 6、小结 目录探测 1、gobuster 2、dirsearch WEB 80端口 /test.php 文件包含漏洞 SSH登录 提权 get root and flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interfa…

圆钢在线直线度测量仪的配置都有哪些?

圆钢产线有很多,并且很多都是需要对直线度尺寸进行检测的,这就是在线直线度测量仪的应用所在,在线检测远比人工检测能带给工厂更大的利益与效率。 在线直线度测量仪原理 直线度测量仪设置3台位置测量仪,每台位置测量仪内布置呈十字…

CMake中开启编译器代码优化加速

【写在前面】 写这篇博客是因为有一天晚上刷到了一篇公众号推文,讲的“如何将一段原本执行需要3秒的程序优化到只需要0.3秒”。长期开发上层应用软件,确实很难接触到一些编程效率优化方面的技巧。但是写C的人还是骨子里有一种潜意识,这代码跑…

云端赋能 算力加速 | 活动回顾

12月16日,华锐技术ACLUB联合火山引擎和AMD以“云端赋能 算力加速”为主题在上海举办了2023量化IT年度专属沙龙活动,会议围绕量化上云、极速行情、高性能处理器等前沿技术深入交流,近40位量化IT齐聚一堂,共同探讨量化行业如何在人工…

纯CSS实现马里奥效果,回忆一下童年吧

📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 CSS专栏:想学CSS的,冲这里 &#x1f4…

使用 pytest 相关特性重构 appium_helloworld

一、前置说明 在 pytest 基础讲解 章节,介绍了 pytest 的特性和基本用法,现在我们可以使用 pytest 的一些机制,来重构 appium_helloworld 。 appium_helloworld 链接: 编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来 代码目录结构: pytest.ini 设置: [pyt…

QT UI自动化测试(1)

一、框架选择 想结合公司产品搭建一套自动化测试框架,一方面自己学习用,一方面也希望跟公司业务结合起来,双赢。公司软件最多的产品是部署在Linux系统上,基于QT QML开发的UI,本来奔着免费的自动化框架去的,…

如何编写一个javaAgent jar工具包超详细教程

介绍 Java Agent技术 Java Agent技术是JDK提供的用来编写Java工具的技术,使用这种技术生成一种特殊的jar包,这种jar包可以让Java程序 运行其中的代码。 Java Agent技术的两种模式 Java Agent技术实现了让Java程序执行独立的Java Agent程序中的代码…

在VMware安装CentOS 7:详细教程

安装准备工作 本地虚拟机:我这里使用的是VMware Workstation 17 Pro centos7系统ISO镜像:我这里使用的是CentOS-7-x86_64-DVD-2009.iso,具体的下载地址是在阿里云官方镜像站:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿…

Mybatis底层原理分析以及源码阅读

费话不多少先上图,我只喜欢画图分析,看图片: 有两个问题: 问题1: 我们一直在写Mapper/DAO只写了接口,没有写具体的实现吧? 【是的】 问题2: 没有写实现类就没办法实例化执行后续的操…

java进阶学习笔记

学习java深度学习,提升编程思维,适合掌握基础知识的工作者学习 1.反射和代理1.1 概念介绍1.2应用场景1.3 反射-reflect1.3.1 获得类-Class1.3.2 获得类的字段-Field1.3.3 动态访问和修改对象实例的字段1.3.4 获得类方法-Method1.3.5 调用方法.invoke1.3.…

c 语言, 随机数,一个不像随机数的随机数

c 语言, 随机数,一个不像随机数的随机数 使用两种方式获取随机数,总感觉使用比例的那个不太像随机数。 方法一: rand() 获取一个随机数,计算这个随机数跟最大可能值 RAND_MAX(定义在 stdlib.h 中&#xf…

PostgreSQL 数据库归档最近被问及的问题问题 与 4 毋 处世学

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1790人左右 1 2 3 4 5&#xff0…

Unity 通过鼠标框选绘制矩形区域

鼠标拖动的同时绘制一块同等大小的区域:如下 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 通过鼠标框选绘制矩形区域 /// </summary> /// public enum MouseType {left = 0,right = 1,middle = 2 } publi…

关于<取消对 NULL 指针“r”的引用><从 “a“ 读取无效数据>两个问题的解决办法

【取消对 NULL 指针“r”的引用】 修改&#xff1a; 必须要检查malloc的返回值&#xff0c;避免空间不够 &#xff08;nullptr只能用于指针类型&#xff0c;不能用于整数类型&#xff09; 【从 "a" 读取无效数据】 修改&#xff1a; 用指针法来表示&#xff0c;…

三张表看懂POE POE+ POE++ 三个协议的相关参数

Hqst华强盛&#xff08;盈盛电子&#xff09;导读&#xff1a;三张表看懂POE POE POE 三个协议的相关参数。 一 ̖ POE协议区分&#xff1a; 802.3af&#xff08;PoE) 百兆网络变压器H81621S 二 ̖ POE协议与受电设备&#xff08;PD&#xff09;工作功率分级 802.3at&#xf…

Yapi接口管理平台Centos7部署

文章目录 1.环境准备1.1 关闭透明大页THP1.2 设置最大文件打开数最大进程数 2.Nodejs安装3.安装Mongodb3.1 下载安装3.2 配置3.3 配置环境变量3.4 启动3.5 关闭 4.安装YAPI4.1 离线安装4.2 页面安装&#xff08;本次采用&#xff09;4.3 访问 1.环境准备 1.1 关闭透明大页THP …

小米SU7正式亮相,媒介盒子多家媒体报道

哈喽大家好啊&#xff0c;今天 媒介盒子来和大家分享媒体推广的干货知识&#xff0c;本篇分享的主要内容是新车上市&#xff0c;小米SU7的营销逻辑 在12月28日下午的发布会上&#xff0c;小米C级轿车SU7正式亮相&#xff0c;SU7的发布&#xff0c;也意味着小米智能科技“人车家…