python 常用数据结构-列表

news2024/9/22 23:37:10

list 列表

  • 列表定义与使用
  • 列表常用方法
  • 列表嵌套
  • 列表推导式

列表定义

  • 列表是有序的可变元素的集合,使用中括号[]包围,元素之间用逗号分隔

  • 列表是动态的,可以随时扩展和收缩

  • 列表是异构的,可以同时存放不同类型的对象

  • 列表中允许出现重复元素
    在这里插入图片描述

列表使用:创建

  • 创建列表
    • 通过构造函数创建
    • 中括号创建并填充
    • 列表推导式
# 1、通过构造函数创建
li1 = list()  # 空列表
li1 = list('hogwarts')  # 字符串
li1 = list((1, 2, 3))  # 元组
li1 = list({4, 5, 6})  # 集合
li1 = list({'a': 7, 'b': 8})  # 字典
print(type(li1), li1)

# 2、中括号创建并填充元素
li2 = []  # 空列表
li2 = [1, 2, 3]  # 直接填充对象
print(type(li2), li2)

列表使用:索引

  • 索引
    • 默认正向索引,编号从 0 开始。
    • 支持反向索引,编号从-1 开始。
li = [1, 2, 3, 4, 5]

# 1、正向索引
print(li[0])  # 打印1
print(li[3])  # 打印4

# 2、反向索引
li = [1, 2, 3, 4, 5]
print(li[-1])  # 打印 5

列表使用:索引示意图

在这里插入图片描述

列表使用:切片

  • 切片 [start: stop: step]

    • start 值: 指示开始索引值,如果没有指定,则默认开始值为 0;
    • stop 值: 指示到哪个索引值结束,但不包括这个结束索引值。如果没有指定,则取列表允许的最大索引值;
    • step 值: 步长值指示每一步大小,如果没有指定,则默认步长值为 1。
    • 三个值都是可选的,非必填

列表使用:切片示意图

在这里插入图片描述

列表使用:切片实例

# 切片基本用法
li = ['h', 'o', 'g', 'w', 'a', 'r', 't', 's']
print(li[0:5:2])  # 打印['h', 'g', 'a']
print(li[2:4])  # 省略了step,打印['g', 'w']
print(li[:4])  # 省略了start和step,打印['h', 'o', 'g', 'w']
print(li[2:])  # 省略了stop和step,打印['g', 'w', 'a', 'r', 't', 's']
print(li[::2])  # 省略start和stop,打印['h', 'g', 'a', 't']
print(li[::-1])  # 特殊的切片写法:逆序打印['s', 't', 'r', 'a', 'w', 'g', 'o', 'h']

'''
list = ["red","green","blue","yellow","white","black"]
"""
正向索引:step为正数
"""
# 正向索引:start_index为0到end_index为6
print(list[0:6]) # ['red', 'green', 'blue', 'yellow', 'white', 'black']

# start_index没有填写,默认从第一个开始,一直取到end_index=6
print(list[:6]) # ['red', 'green', 'blue', 'yellow', 'white', 'black']

# step没有填写,默认是1,start_index为0,一直取到end_index=2
print(list[0:2])  #['red', 'green']

# step没有填写,默认是1,start_index为1,一直取到end_index=4
print(list[1:4])  # ['green', 'blue', 'yellow']

# start_index为1,一直取到end_index=5,step是2
print(list[1:5:2])  # ['green', 'yellow']
'''
反向索引:step为负数
'''
print("反向索引=============")
# step=1,反向索引,从start_index=-6开始,一直取到end_index=0为止。
print(list[-6::])  #['red', 'green', 'blue', 'yellow', 'white', 'black']

# step=-1,反向索引,从start_index=3开始,一直取到end_index=0为止。
print(list[3:0:-1])  #['yellow', 'blue', 'green']

# step=-2,反向索引,从start_index=6开始,一直取到end_index=0为止。
print(list[6::-2])  #['black', 'yellow', 'green']

# step=-3,反向索引,从start_index=5开始,一直取到end_index=2为止。
print(list[5:2:-3])  #['black']

# step=-1,反向索引,从start_index=-3开始,一直取到end_index=-5为止。
print(list[-3:-5:-1])  #['yellow', 'blue']

# start_index > end_index时,取出的结果为空
print(list[4:2])  #[]
print(list[-5:-3:-1])  # []
'''多层切片'''
list = ["red","green","blue","yellow","white","black"]
# 链式列表切片
print(list[:6][2:5][-1:])

'''上边的链式列表与下边的步骤是相等的'''
list2 = list[:6]
# ['red', 'green', 'blue', 'yellow', 'white', 'black']
print(list2)
list3 = list2[2:5]
# ['blue', 'yellow', 'white']
print(list3)
list4 = list3[-1:]
# ['white']
print(list4)

列表使用:运算符

  • 重复
    • 使用 * 运算符可以重复生成列表元素。
  • 合并
    • 使用 + 加号运算符,可以将两个列表合二为一。
# 1、重复
li = [1] * 5
print(li)  # 打印[1, 1, 1, 1, 1]

# 2、合并
li1 = [1, 2, 3]
li2 = [99, 100]
print(li1 + li2)  # 打印[1, 2, 3, 99, 100]

列表使用:成员检测

  • in:检查一个对象是否在列表中,如果在则返回 True,否则返回 False。

  • not in:检查一个列表是否不包含某个元素。如果不在返回 True,否则返回 False。

li = [1, 2, 3]

# in
print(1 in li)  # 返回True
print(100 in li)  # 返回False

# not in
print(1 not in li)  # 返回False
print(100 not in li)  # 返回True

列表方法

  • append()
  • extend()
  • insert()
  • pop()
  • remove()
  • sort()
  • reverse()

列表方法 append()

  • append(item):将一个对象 item 添加到列表的末尾。

  • 入参:对象 item

  • 返回:None

# 添加元素
# 添加元素
li = []
li.append(1)
li.append(3.14)
li.append("hogwarts")
li.append([6, 6, 6])
li.append((1.2, 1.5))
li.append({'msg': "Hello"})

print(li)  # 打印列表
print(len(li))  # 获取列表元素个数

列表方法 extend()

  • extend(iterable):将一个可迭代对象的所有元素,添加到列表末尾。

  • 入参:可迭代对象 iterable

  • 返回:None

# extend()的用法

li = []
li.extend('hogwarts')  # 添加的是字符串的所有字母
li.extend([1, 2, 3])  # 接收列表的所有元素
li.extend((4, 5, 6))  # 接收元组的所有元素
li.extend({'a': 1, 'b': 2})  # 接收字典的所有key值
print(li)

列表方法 insert()

  • insert(index, item):将一个对象插入到指定的索引位置

  • 入参:索引值 index ,一个对象 item

  • 返回:None

  • 原索引位置及后面的元素后移一位

li = [0, 1, 2]
print("插入前: ", li)  # 打印 [0, 1, 2]

# 在索引0的位置插入元素
li.insert(0, 'hogwarts')
print("插入后: ", li)  # 打印 ['hogwarts', 0, 1, 2]

列表方法 pop()

  • pop(index) 或 pop()

  • 弹出并返回所指定索引的元素。

  • 入参:索引值 index,可不传

  • 返回:指定索引的元素

  • 返回:未指定索引则返回末尾元素

  • 如果索引值不正确,或者列表已经为空,则引发 IndexError 错误

letters = ['h', 'o', 'g', 'w', 'a', 'r', 't', 's']

# 传入索引3,弹出元素 w
n1 = letters.pop(3)
print(n1)  # 打印 w

# 不传参数,默认弹出末尾元素
n2 = letters.pop()
print(n2)  # 打印 s

列表方法 remove()

  • remove(item)

  • 移除列表中第一个等于 item 的元素

  • 入参:指定元素 item

  • 返回:None

  • 目标元素必须已存在,否则会报 ValueError

li = ['h', 'o', 'g', 'w', 'a', 'r', 't', 's']
print(len(li))  # 打印 8

# 1、删除指定元素'h'
li.remove('h')
print(li)  # 打印 ['o', 'g', 'w', 'a', 'r', 't', 's']
print(len(li))  # 打印 7

# 2、移除第一个2
li = [1, 2, 3, 2, 1]
li.remove(2)
print(li)  # 打印 [1, 3, 2, 1]

# 3、删除不存在的元素,会报ValueError错误
li = [1, 2, 3]
li.remove(100)

列表方法 sort()

  • sort(key=None, reverse=False)

  • 对列表进行原地排序,只使用 < 来进行各项间比较。

  • 入参:支持 2 个关键字参数:

    • key:指定带有一个参数的函数,用于从每个列表元素中提取比较键。
    • reverse:默认值为 False 表示升序,为 True 表示降序
  • 返回:None

nums = [2, 4, 3, 1, 5]

# 1、不传参数,默认升序,数字从小到大排列
nums.sort()
print(nums)  # 打印 [1, 2, 3, 4, 5]

# 2、指定key=len,按元素的长度排序
words = ['Python', 'Java', 'R', 'Go']
words.sort(key=len)
print(words)  # 打印 ['R', 'Go', 'Java', 'Python']

# 3、指定reverse=True,降序
nums = [2, 4, 3, 1, 5]
nums.sort(reverse=True)
print(nums)  # 打印 [5, 4, 3, 2, 1]

列表方法 reverse()

  • reverse():将列表中的元素顺序反转
  • 参数:无
  • 返回:None
  • 反转只是针对索引值,元素之间不相互比较。
# 反转顺序
nums = [8, 1, 5, 2, 77]
nums.reverse()
print(nums)  # 打印[77, 2, 5, 1, 8]
book_a = [
    ('yuwen',20),
    ('yingyu',18),
    ('shuxue',30)
]
b = []
for x in book_a:
    b.append(x[::-1])
print(sorted(b))

列表嵌套

  • 嵌套列表是指在列表里存放列表
  • 列表的常用方法都适用于嵌套列表
# 1、创建嵌套列表
li_2d = [['a', 'b', 'c'], [1, 2, 3]]
print(type(li_2d))  # 打印<class 'list'>
print(len(li_2d))  # 打印 2

# 2、访问嵌套列表中的元素
print(li_2d[0][2])  # 打印 'c'

列表推导式

  • 列表推导式是指循环创建列表,相当于 for 循环创建列表的简化版

  • 语法:[x for x in li if x ...]

"""
实例:将 1-10 中的所有偶数平方后组成新的列表
"""

# 1、传统解决方案
result = []
for ele in range(1, 11):
    if ele % 2 == 0:
        result.append(ele ** 2)
print(result)  # 打印 [4, 16, 36, 64, 100]

# 2、使用列表推导式
result = [ele ** 2 for ele in range(1, 11) if ele % 2 == 0]
print(result)  # 打印 [4, 16, 36, 64, 100]

使用range()创建数字列表

要想创建数字列表,可使用函数list()将range()的结果直接转换为列表,可使用list():

numbers = list(range(1,6))
# [1, 2, 3, 4, 5]
print(numbers)

使用函数range()时,还可指定步长。为此,可给这个函数指定第三个参数,Python将根据这个步长来生成函数。
例如,下面的代码打印1~10的偶数:

numbers = list(range(2,11,2))
# [2, 4, 6, 8, 10]
print(numbers)

打印1~10的平方:

list_squra = []
for i in list(range(1,11)):
    list_squra.append(i**2)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print(list_squra)

# 使用列表推导式:
list_squra = [i**2 for i in list(range(1,11))]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print(list_squra)

遍历切片:

如果想要遍历列表的部分元素,可在for循环中可使用切片,下面的示例是遍历前三个元素,并打印出来:

list = ["a","b","c","d","e","f","g"]
for i in list[0:3]:
    print(i)

在这里插入图片描述

复制列表

要想复制列表,可创建一个包含整个列表的切片,方法是同是省略起始索引和种植索引([:]).

my_foods = ["apple","pear","cake","pizza"]
friend_foods = my_foods[:]
print(my_foods)
print(friend_foods)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阶乘后的零(力扣)数学 JAVA

给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;0 解释&#xff1a;3! 6 &#xff0c;不含尾随 0 示例 2&#xff1a; 输入&#xff1a;n 5 输出&…

WSL2 及 docker开发环境搭建

WSL2 及 docker开发环境搭建 1.使能WSL 控制面板->程序->程序和功能->启动或关闭Windows功能->勾选红框中选项->确认后重启电脑 &#xfeff; 2.下载Linux Kernel Update安装包 下载地址如下&#xff0c; 附件已将下载的安装包作为附件形式上传&#xff0c;…

ITIL 4服务连续性管理实践

一、目的和描述 关键信息 服务连续性管理实践的目的是确保灾难发生时&#xff0c;服务的可用性和性能能够保持在足够的水平。本实践提供了一个框架机制&#xff0c;利用产生有效响应的能力来构建组织的弹性&#xff0c;以保障关键利益相关者的利益&#xff0c;还有组织的声誉…

element 封装dialog弹窗组件鼠标移动到弹窗出现title

问题&#xff1a; element 封装dialog弹窗组件鼠标移动到弹窗出现title 封装的组件 <template><el-dialog title"111"v-bind"$attrs" v-on"$listeners" :visible.sync"show" ></el-dialog> </template><s…

02-webpack的热更新是如何做的,以及原理

一、是什么 HMR 可以理解为模块热替换&#xff0c;指在应用程序运行过程中&#xff0c;替换、添加、删除模块&#xff0c;而无需重新刷新整个应用. 如&#xff0c;我们在应用运行过程中修改了某个模块&#xff0c;通过自动刷新会导致整个应用的整体刷新&#xff0c;那页面中的…

pygame伪3d 实现地面效果

教程来自What is Mode 7? Let’s code it! 油管镜像 import cv2 import pygame import sys from pygame import gfxdraw import numpy as np(width, height) (800, 600) pygame.init() screen pygame.display.set_mode((width, height)) image pygame.image.load("11…

ElasticSearch基础学习(SpringBoot集成ES)

一、概述 什么是ElasticSearch&#xff1f; ElasticSearch&#xff0c;简称为ES&#xff0c; ES是一个开源的高扩展的分布式全文搜索引擎。 它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。 ES也…

什么是API接口?主要作用是什么?

API英文全称为&#xff1a;Application Programming Interface&#xff0c;中文意思是应用程序编程接口&#xff0c;它是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力。 主要作用&#xff1a; API之主要目的是提供应用程…

【笔记】Pycharm配置Node.js运行js代码

最近在学习关于Js逆向的知识&#xff0c;需要在PyCharm中运行Js程序&#xff0c;记录一下配置过程。 安装Node.js Node.js中文网 选择自己电脑对应的安装包下载暗转即可 安装好软件后&#xff0c;配置node.js环境变量。 完成安装和环境配置后&#xff0c;打开cmd测试是否安…

解决 idea 中使用 git 提交显示多余空行

解决 idea 中使用 git 提交显示多余空行 1、问题描述2、解决方法 欢迎访问我的个人博客&#xff1a;https://wk-blog.vip 1、问题描述 在 idea 中使用Git提交代码时&#xff0c;发现不管是对于代码文件还是其他纯文本文件&#xff0c;在保存时总会在文件末尾加上一个空行&…

网络应用基础 TCPIP协议(NETBASE第四课)

网络应用基础 TCPIP协议&#xff08;NETBASE第四课&#xff09; TCP/IP 百度百科 CP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是T…

【Excel经验】日期时间处理方法

概览-公式汇总 公式功能公式公式说明提取时间中的日期TEXT(A2,“yyyy-mm-dd”)A2列数据格式样例&#xff1a;2023/7/5 6:20:10计算耗时得到单位&#xff1a;秒数VALUE(TEXT(B2-A2,“[ss]”))A2、B2列数据格式样例&#xff1a;2023/7/5 6:20:10计算耗时得到格式化显示年月日B2-…

基础算法-子矩阵的和

1 课堂笔记 2 代码 3.代码解析 #include<iostream> using namespace std; const int maxn1010; int a[maxn][maxn],s[maxn][maxn]; int n,m,q,x1,y1,x2,y2;int main(){scanf("%d%d%d",&n,&m,&q);//为数组赋值for(int i1;i<n;i){for(int j1;j&…

Mycat【Mycat分片规则(按日期(天)分片、全局序列)、Mycat高可用(Mycat高可用概述)】(七)-全面详解(学习总结---从入门到深化)

目录 Mycat分片规则_按日期&#xff08;天&#xff09;分片 Mycat分片规则_全局序列 Mycat高可用_Mycat高可用概述 Mycat分片规则_按日期&#xff08;天&#xff09;分片 实现原理 此规则为按天分片&#xff0c;设定时间格式、范围。 实现过程 创建示例表 #用户信息表 …

Linux时间子系统

转自&#xff1a;深入理解Linux时间子系统(0.7)_城中之城的博客-CSDN博客 一、时间概念解析 我们住在空间里&#xff0c;活在时间中。时间对我们来说是既熟悉又陌生。熟悉是因为我们每天都在时间的驱动下忙碌着&#xff0c;陌生是因为我们从来没有停下来认真思考过时间是什么…

C++内存泄露排查的一个案例

背景: 这熟悉的线条. 请求量没啥波动, 不用怀疑, 就是内存泄露了. 方案一 Valgrind Valgrind可以用来检测是否有非法使用内存的问题, 如: 访问未初始化的内存,访问数组越界, 忘记释放动态内存的问题; 首先需要定位是哪个进程的内存泄露. 使用top命令, 然后shiftm按照内存排序…

python 常用数据结构-字典

python 常用数据结构-字典 Dict 字典字典定义字典使用&#xff1a;创建字典使用&#xff1a;访问元素字典使用&#xff1a;操作元素字典使用&#xff1a;嵌套字典字典方法字典方法 keys()字典方法 values()字典方法 items()字典方法 get()字典方法 update()字典方法 pop() 字典…

十二、Docker Compose 介绍与安装

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、docker compose介绍二、docker compose能干嘛三、docker compose安装与卸载3.1 docker-compose安装3.2 docker-compose卸载 总结 前言 在使用k8s之前&#xff0c;随…

overleaf 常用命令

ctrlb 加粗 ctrli 斜体 \emph 斜体&#xff0c;强调 行内公式 $ a b c $ 行间公式 \begin{equation} ab_cd \end{equation} 交叉引用 1.引入宏包 \usepackage[colorlinks]{hyperref} 2.\label \subsection{related wok}\label{sec:related work} this is related …

【开源分享】在线客服系统源码,支持发送文本表情,上传图片附件附详细搭建教程...

源码介绍 golang开发的单用户在线客服系统&#xff0c;功能非常的简洁实用&#xff0c;没有多余的功能。golang语言可编译为二进制程序&#xff0c;自带守护进程功能&#xff0c;相比于流传最广的PHP客服系统要稳定 环境配置 服务器&#xff1a;linux 或者 windows都可以 golan…