python基础-02-列表+序列数据类型
文章目录
- 【README】
- 【4】python列表
- 【4.1】列表数据类型
- 【4.1.1】用索引取得列表中的单个值
- 【4.1.2】负数索引
- 【4.1.3】利用切片获取子列表
- 【4.1.4】用索引改变列表中的值
- 【4.1.5】列表连接与复制
- 【4.1.6】del语句删除列表中的元素
- 【4.2】使用列表
- 【4.2.1】列表用于循环
- 【补充】遍历列表
- 【4.2.2】in 和 not in 操作符
- 【4.2.3】多重赋值技巧
- 【4.2.4】enumerate()函数与列表一起使用
- 【4.2.5】random.choice() 和 random.shuffle() 与列表一起使用
- 【4.3】增强的赋值操作
- 【4.4】列表的方法
- 【4.4.1】用index方法在列表中查找值
- 【4.4.2】用append()方法和insert()方法在列表中添加值
- 【4.4.3】用remove方法删除列表中的值
- 【4.4.4】用sort()方法将列表中的元素排序
- 【4.4.5】使用 reverse()方法反转列表中的值
- 【4.5】序列数据类型
- 【4.5.1】可变和不可变数据类型
- 【4.5.2】元组数据类型
- 【4.5.3】变量的数据类型
- 【4.5.4】使用list()和tuple()来转换类型
- 【4.6】引用
- 【4.6.1】标识和id()函数
- 【4.6.2】copy模块的copy() 和 deepcopy()
【README】
本文总结自《python编程快速上手-让繁琐工作自动化》第4章,非常棒的一本书,墙裂推荐;
- 1) python的序列数据类型:包括列表,字符串,由range()返回的范围对象,以及元组;
- 对列表的操作,如按索引取值,切片,for循环,len函数,in和not in等操作符,都可以作用于序列数据类型及字符串类型;
- 2)列表数据类型:列表是一个值:由多个值构成的序列;如 [‘1’, ‘2’, ‘3’] ;
- 列表中的值称为表项, 用逗号分隔;列表中的值,可以是不同类型; [‘1’, ‘2’, True]
- 3)元组数据类型:元组定义使用圆括号(1,2,3),列表定义使用中括号[1,2,3] ; 元组不可变,列表可变
【4】python列表
【4.1】列表数据类型
1)列表是一个值:由多个值构成的序列;如 [‘1’, ‘2’, ‘3’] ;列表中的值称为表项, 用逗号分隔;
2)列表中的值,可以是不同类型; [‘1’, ‘2’, True]
list00 = ['1', '2', 3, 4, True]
print(list00)
3)列表中的元素还可以是列表
# 列表中的元素还可以是列表
twoDimensionArr = [['a11', 'a12', 'a13'], ['a21', 'a22', 'a23'], ['a31', 'a32', 'a33'], [41, 42.2, 'a43', 'a44', 'a45']]
print(twoDimensionArr[0])
print(twoDimensionArr[1])
print(twoDimensionArr[2])
print(twoDimensionArr[3])# ['a11', 'a12', 'a13']
# ['a21', 'a22', 'a23']
# ['a31', 'a32', 'a33']
# [41, 42.2, 'a43', 'a44', 'a45']
【4.1.1】用索引取得列表中的单个值
# 用索引取得列表中的单个值
list01 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(list01[0]) # a
【4.1.2】负数索引
1)-1 表示列表中的最后一个索引; -2表示列表中的倒数第2个索引;
# 负数索引
list01 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(list01[-1]) # g
print(list01[-2]) # f
【4.1.3】利用切片获取子列表
1)切片:从列表中获取多个值,结果是一个新列表; 切片用一对方括号来表示,有2个由冒号分隔的整数; 如 list01[1:3]
- list01[2] :一个列表和索引; (1个整数 )
- list01[1: 3]:是一个列表和切片 (2个整数)
2)在一个切片中:第1个整数是开始索引(包含),第2个整数是结束索引(不包含);
# 利用切片取得子列表
print("利用切片取得子列表")
list01 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(list01[1:4]) # ['b', 'c', 'd']
print(list01[0:-1]) # ['a', 'b', 'c', 'd', 'e', 'f']
print(list01[:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(list01[0:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(list01[0:len(list01)]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(list01[:2]) # ['a', 'b'] 下标0,1,不包含下标2的元素
【4.1.4】用索引改变列表中的值
# 修改列表中的元素
list01[0] = 'a_v2'
print(list01)
# ['a_v2', 'b', 'c', 'd', 'e', 'f', 'g']
【4.1.5】列表连接与复制
1) +操作符:用于连接2个列表;
2)*操作符:用于列表复制;
# 列表连接和列表复制
list02 = ['a1', 'a2', 'a3']
list03 = list02 + ['a4', 'a5', 'a6']
print(list03[:])
# ['a1', 'a2', 'a3', 'a4', 'a5', 'a6']list04 = list02 * 2
print(list04[:])
# ['a1', 'a2', 'a3', 'a1', 'a2', 'a3']
【4.1.6】del语句删除列表中的元素
1)注意:需要说明的是, del语句删除列表中指定索引的元素,被删除元素后面的所有元素,都会向前移动一个索引;可能出现性能问题;
# 用del语句删除列表中的元素
list05 = [1, 2, 3]
del list05[0]
print(list05[:])
# [2, 3]
【4.2】使用列表
【4.2.1】列表用于循环
# 列表用于循环
# 遍历列表
for i in range(4):print(i)
# 0
# 1
# 2
# 3
【补充】遍历列表
# 遍历列表
for i in [1, 2, 3]:print(i)
# 1
# 2
# 3# 遍历列表2
arr01 = ['10', 20, 30, 40]
for i in range(len(arr01)):print('index=' + str(i) + ', value=' + str(arr01[i]))# index=0, value=10
# index=1, value=20
# index=2, value=30
# index=3, value=40
【4.2.2】in 和 not in 操作符
1)in 和 not in 操作符:确定一个值是否在列表中;
arr01 = ['10', 20, 30, 40]
# in 和 not in 操作符
print('10' in arr01)
print('20' in arr01)
print(20 in arr01)
print(20 not in arr01)
# True
# False
# True
# False# 20存在于arr01数组
print("=== 20存在于arr01数组 ===")
if 20 not in arr01:print(str(20) + '不存在于arr01数组')
else:print(str(20) + '存在于arr01数组')
【4.2.3】多重赋值技巧
# 多重赋值技巧 (类似于react的解构赋值)
print("=== 多重赋值技巧 === ")
colorArr = ['red', 'green', 'blue']
e1, e2, e3 = colorArr
print(e1, e2, e3) # red green blue
【4.2.4】enumerate()函数与列表一起使用
# enumerate()与列表一起使用(类似于java的foreach循环)
print("\nenumerate()与列表一起使用(类似于java的foreach循环)")
colorArr = ['red', 'green', 'blue']
for index, value in enumerate(colorArr):print('index[' + str(index) + '] = ' + value)# enumerate()与列表一起使用(类似于java的foreach循环)
# index[0] = red
# index[1] = green
# index[2] = blue
【4.2.5】random.choice() 和 random.shuffle() 与列表一起使用
# random.choice() 和 random.shuffle() 与列表一起使用
print("\n === random.choice() 和 random.shuffle() 与列表一起使用")
peopleArr = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
print(random.choice(peopleArr)) # lisi# 洗牌函数shuffle() 将就地修改列表,而不是返回新列表
print("\n\n=== 洗牌函数shuffle() 将就地修改列表,而不是返回新列表")
random.shuffle(peopleArr)
print(peopleArr)
print(peopleArr[:])# ['wangwu', 'zhangsan', 'zhaoliu', 'lisi']
# ['wangwu', 'zhangsan', 'zhaoliu', 'lisi']
其中: random.choice(list)表示从列表list中返回一个随机选择的表项;
【4.3】增强的赋值操作
print("\n\n === 增强的赋值操作")# 4.3 增强的赋值操作
age = 42
age += 1
print(age) # 43age -= 3
print(age) # 40
增强的赋值操作:指的是通过 +=, -=, *=, /= 等操作符为变量赋值;
【4.4】列表的方法
1)列表的方法与函数是同一回事,只不过,列表的方法在一个值上进行调用;
【4.4.1】用index方法在列表中查找值
# 用index发发发在列表中查找值,返回索引下标
peopleArr = ['a', 'b', 'c', 'd']
print(peopleArr.index('a')) # 0
【注意】若传入的值在列表中不存在,则抛出ValueError错误;
【4.4.2】用append()方法和insert()方法在列表中添加值
1)用append()方法和insert()方法在列表中添加值, 列表被就地修改;
- list.append(‘e1’)方法:把e1添加到列表list的末尾;
- list.insert(1, ‘f1’)方法:把f1添加到列表list的索引为1的位置;
alphabetArr = ['a', 'b', 'c', 'd']
alphabetArr.append('e1')
print(alphabetArr) # ['a', 'b', 'c', 'd', 'e1']alphabetArr.insert(1, 'f1')
print(alphabetArr) # ['a', 'f1', 'b', 'c', 'd', 'e1']
【4.4.3】用remove方法删除列表中的值
print('\n=== 用remove方法删除列表中的值')
alphabetArr = ['a', 'b', 'c', 'd']
alphabetArr.remove('a')
print(alphabetArr) # ['b', 'c', 'd']
【4.4.4】用sort()方法将列表中的元素排序
print("\n\n=== 使用 sort()方法将列表的值排序")
alphabetArr = ['f', 'e', 'a', 'b', 'd', 'c']
alphabetArr.sort()
print(alphabetArr) # ['a', 'b', 'c', 'd', 'e', 'f']alphabetArr.sort(reverse=True)
print(alphabetArr) # ['f', 'e', 'd', 'c', 'b', 'a']
【4.4.5】使用 reverse()方法反转列表中的值
print("使用 reverse()方法 反转列表中的值")
alphabetArr = ['a', 'b', 'c', 'd']
alphabetArr.reverse()
print(alphabetArr) # ['d', 'c', 'b', 'a']
【4.5】序列数据类型
1)python的序列数据类型:包括列表,字符串,由range()返回的范围对象,以及元组;
- 对列表的操作,如按索引取值,切片,for循环,len函数,in和not in等操作符,都可以作用于序列数据类型及字符串类型
# 4.6 序列数据类型
name = 'Student'
print(name[0]) # S
print(name[-2]) # n
print(name[0:4]) # Stud
print('St' in name) # True
print('t' in name) # True
for i in name:print(i)# S
# t
# u
# d
# e
# n
# t
【4.5.1】可变和不可变数据类型
1)可变与不可变:
- 列表:可变,它的值可以新增,删除,修改;
- 字符串:不可变,不能被修改;改变一个字符串的正确方式是使用切片和连接构造一个新的字符串,或复制一个新的字符串;
- 元组:可变;
【4.5.2】元组数据类型
1)元组与列表区别:
- 元组定义使用圆括号(1,2,3),列表定义使用中括号[1,2,3];
- 元组不可变,列表可变;
2)元组的优点:
- 用元组告诉其他人,不打算改变这个序列的值;
- 因为元组不可变化,所以python底层可以优化,让使用元组的代码运行速度快于列表;
print('\n=== 元组数据类型 === ')
eggs = ('hello', 42, 53)
print(eggs[0]) # hello
print(eggs[1:]) # (42, 53)
print(len(eggs)) #
【4.5.3】变量的数据类型
print('\n=== 变量的数据类型 === ')
print(type(('hello', ))) # <class 'tuple'>
print(type(('hello'))) # <class 'str'>
【4.5.4】使用list()和tuple()来转换类型
1)使用list()和tuple()来转换类型, 分别转换为列表与元组
print('\n=== 使用list()和tuple()来转换类型, 分别转换为列表与元组')
tuple01 = tuple(['a1', 'a2', 'a3'])
print(type(tuple01)) # <class 'tuple'>
print(list(tuple01)) # ['a1', 'a2', 'a3']
print(list('hello')) # ['h', 'e', 'l', 'l', 'o']
【4.6】引用
1)什么是引用: 变量存储的是对计算机内存位置的引用,或者简单理解引用就是值的内存地址(我是这么理解的)
【4.6.1】标识和id()函数
1)id函数返回的是入参的唯一标识(内存地址的hash值)
# 标识和id()函数
a = 'hello'
print(id(a)) # 2897082779712
a += ' wolrd'
print(id(a)) # 2897082736432
2)通过id()函数来判断append()函数是否会创建新的列表
print("\n\n === append()方法不会创建新的列表,而是就地修改对象")
arr = ['a', 'b', 'c']
print(id(arr)) # 2844017850560
arr.append('d')
print(id(arr)) # 2844017850560
显然, append前后, 变量arr的值没有变,所以append()没有创建新的列表(变量)
【4.6.2】copy模块的copy() 和 deepcopy()
# import copy
print('\n=== copy模块的copy() 和 deepcopy()')
arr = ['a', 'b', 'c', 'd']
print(id(arr)) # 2250866974592# copy模块的copy()复制
arr2 = copy.copy(arr)
print(id(arr2)) # 2250866981056# 修改arr2的第1个元素, arr2发生改变,但arr没有变化
arr2[0] = 'apple'
print(arr2) # ['apple', 'b', 'c', 'd']
print(arr) # ['a', 'b', 'c', 'd']
【补充】如果要复制的列表中包含了列表, 那就使用copy.deepcopy()函数来代替,deepcopy()将同时复制它们内部的列表;
相关文章:
python基础-02-列表+序列数据类型
文章目录 【README】【4】python列表【4.1】列表数据类型【4.1.1】用索引取得列表中的单个值【4.1.2】负数索引【4.1.3】利用切片获取子列表【4.1.4】用索引改变列表中的值【4.1.5】列表连接与复制【4.1.6】del语句删除列表中的元素 【4.2】使用列表【4.2.1】列表用于循环【补充…...
‘闭包‘, ‘装饰器‘及其应用场景
‘闭包’, 装饰器’及其应用场景 一, 闭包及其应用场景 图解 闭包的定义 概述: 内部函数 使用了 外部函数 的变量, 这种写法就称之为闭包. 格式: def 外部函数名(形参列表):外部函数的(局部)变量def 内部函数名(形参列表):内部函数的(局部)变量return 内部函数名前提条件: …...
IDEA 快捷键ctrl+shift+f 无法全局搜索内容的问题及解决办法
本篇文章主要讲解IDEA、phpStrom、webStrom、pyCharm等jetbrains系列编辑器无法进行全局搜索内容问题的主要原因及解决办法。 日期:2025年3月22日 作者:任聪聪 现象描述: 1.按下ctrlshiftf 输入法转为了繁体。 2.快捷键ctrlshiftr 可以全局检…...
Java——Random库
一、作用 Random库——生成随机数 二、实现步骤 1.导包:import java.util.Random; #快捷键:“Random”回车键 2.取得随机数:Random 变量1 new Random(); 3.调用随机数:类型 变量2 变量1.nextInt(n); (代表变量…...
【通过Groovy去热修复线上逻辑】1.执行线上数据修复 2.写工具
1.执行groovy // 实际执行的话, 我们是通过vue提交的 http://localhost:8080/groovy/execute?scriptimport com.example.groovytest.controller.LoginController; LoginController.num251222 还有个技巧: 而执行执行的,则是: 写的工具什么的,想直接使…...
Powershell WSL导出导入ubuntu22.04.5子系统
导出Linux子系统 导出位置在C盘下,根据自己的实际情况更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 导入Linux子系统 好处是目录可用在任意磁盘路径,便于迁移不同的设备之间Write-Host &quo…...
【005安卓开发方案调研】之Flutter+Dart技术开发安卓
基于2025年国内移动开发环境现状,结合多份行业分析报告和技术文档,对FlutterDart开发安卓应用的技术成熟度和生态适配性分析如下: 一、技术成熟度评估 1. 跨平台能力达到生产级标准 Flutter的Skia自渲染引擎和Dart的AOT/JIT双编译模式&…...
论文笔记(七十三)Gemini Robotics: Bringing AI into the Physical World
Gemini Robotics: Bringing AI into the Physical World 文章概括1. 引言2. Gemini 2.0的具身推理2.1. 具身推理问答(ERQA)基准测试2.2. Gemini 2.0的具身推理能力2.3. Gemini 2.0支持零样本和少样本机器人控制 3. 使用 Gemini Robotics 执行机器人动作3…...
AI + 医疗 Qwq大模型离线本地应用
通义千问Qwq-32b-FP16可用于社区医院、乡镇卫生院、诊所等小型医疗机构,替代专业合理用药系统,作为药品知识库,实现以下功能: 药品信息智能查询:检索药品的详细说明书、适应症、禁忌症、不良反应及药物相互作用等关键信…...
Vue 3 项目实现国际化指南 i18n
引言 在开发现代 Web 应用时,国际化(Internationalization,简称 i18n)已经成为一个不可或缺的功能。无论是面向全球用户的商业网站,还是需要支持多语言的企业应用,良好的国际化支持都能显著提升用户体验。本…...
元音辅音及其字母组合发音
文章目录 单元音长元音/ɑː//ɔ://u://i://ɜː/// 短元音/ʌ//ɒ//ʊ//ɪ//ə//e/ 双元音/eɪ//aɪ//ɔɪ//ɪə//eə//ʊə//əʊ//aʊ/ 辅音3个鼻辅音m n ŋ 5个独立浊辅音w j r l h 20个清浊相对的辅音s zʃ ʒf vθ p bt dk gts dztʃ dʒtr dr 以下是列举的部分字母组合…...
【Vitis AIE】FPGA图像处理 11 双线性插值 Bilinear Interpolation
双线性插值 https://github.com/Xilinx/Vitis-Tutorials/tree/2024.2/AI_Engine_Development/AIE/Design_Tutorials/11-Bilinear_Interpolation 简介 双线性插值是一种使用重复线性插值来插值两个变量函数的方法。它通常用于以下应用: 图像处理和计算机视觉&…...
Linux | 安装 Samba将ubuntu 的存储空间指定为windows 上的一个磁盘
01 安装 samba 文件来实现。比如把我们 ubuntu 的存储空间指定为我们 windows 上的一个磁盘,然后我们在这个磁盘里面创建 .c 文件,进行我们代码的修改和编写,可以安装 samba 文件来实现。 samba 是一种网络共享服务,可以通过网络访问我们指定的文件夹 02 第一步:下…...
一文说清预训练与微调:AI的双重训练法则
什么是预训练? 预训练是大型语言模型训练的第一步。它在资金和计算能力的支持下,通过深入分析大量的文本数据,使模型建立起语言的基本构架。在这一阶段,模型通过学习海量的书籍、文章和网页,识别出语言的语法、句法和…...
solana增加流动性和删除流动性
在 Solana 区块链上增加和删除流动性通常通过去中心化交易所(DEX)实现,例如 Raydium 或 Orca。以下是详细的操作流程和注意事项: 一、增加流动性 步骤: 1. 连接钱包 使用支持 Solana 的钱包(如 Phantom、…...
996引擎-接口测试:音效测试NPC
996引擎-接口测试:音效测试NPC 参考资料local offset = 1 -- 默认偏移量function main(player, newOffset)offset = newOffset or offset -- 更新偏移量local buttonWidth =...
javabean类,测试类,工具类都是什么?
JavaBean类 用来描述一类事物的类。比如Student、Teacher、Dog、Cat 例如下面的这个就是JavaBean类 package com.hong.static01demo;public class Student {//姓名,年龄,性别private String name;private int age;private String gender;public stati…...
基于C8051F020单片机的液晶显示,LCD1602并口驱动,单片机并口驱动LCD1602
一、前言 LCD1602是一种广泛使用的字符型液晶显示模块,有8根数据线和3根控制线E,RS和R/W,8根数据线与单片机P6连接,3根控制线与使用P1口的P1.4、P1.5、P1.6连接,VO连接了P1.7,通过给P1.7赋值0或1ÿ…...
miniconda安装保姆级教程|win11|深度学习环境配置
一、官网安装miniconda miniconda官网:Miniconda - Anaconda 点击Download按钮 在红框位置输入邮箱并点击submit,下载链接将会发到邮箱中 邮箱中将会收到如图所示邮件,点击下载 选择windows对应的miniconda安装包 miniconda安装包安装完成如…...
算力100问☞第92问:为什么各地热衷建设算力中心?
目录 1、宏观分析 2、政府角度分析 3、投资者角度分析 在数字化浪潮中,各地对算力中心建设的热情高涨,这一现象背后潜藏着诸多深层次的原因,涵盖了经济、科技、社会等多个维度,且彼此交织,共同驱动着这一发展趋势。 1、宏观分析 从经济结构转型的底层逻辑来看,全球经…...
HTML字符实体笔记
一、概述 在HTML中,某些字符具有特殊含义,不能直接用于网页内容显示,需要使用字符实体来代替。字符实体分为两类:字符实体名称和字符实体编号。字符实体名称由&开头,后跟实体名称,以分号;结束…...
Linux shell脚本-概述、语法定义、自定义变量、环境变量、预设变量、变量的特殊用法(转义字符、单双引号、大小括号)的验证
目录 1.shell概述 1.1作为应用程序: 1.2 shell 作为一门语言 2.shell 语法 2.1 shell脚本的定义与执行 (1)新建文件 (2)程序开头第一行 必须写shell的类型 (3)程序编写完后,…...
数据驱动进化:AI Agent如何重构手机交互范式?
如果说AIGC拉开了内容生成的序幕,那么AI Agent则标志着AI从“工具”向“助手”的跨越式进化。它不再是简单的问答机器,而是一个能够感知环境、规划任务并自主执行的智能体,更像是虚拟世界中的“全能员工”。 正如行业所热议的:“大…...
DL学习笔记:穿戴设备上的轻量级人体活动识别方法
Hello,大家好!这里是《Dream 的深度学习笔记》,本系列将聚焦三个学习方面: 论文解读:拆解经典论文与最新突破 技术实现:从模型搭建到实际部署 应用案例:涵盖图像识别、深度学习、人工智能等热门方向 让…...
拓展知识三:编码学及密码学
编码和密码的区别 研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。 编码和密码是两个不同的概念,它们的区别如下:…...
windows安装配置FFmpeg教程
1.先访问官网:https://www.gyan.dev/ffmpeg/builds/ 2.选择安装包Windows builds from gyan.dev 3. 下滑找到release bulids部分,选择ffmpeg-7.0.2-essentials_build.zip 4. 然后解压将bin目录添加path系统变量:\ffmpeg-7.0.2-essentials_bui…...
Qt/C++项目积累:4.远程升级工具 - 4.1 项目设想
背景: 桌面程序一般都支持远程升级,也是比较常用的场景设计。如酷狗音乐的升级,会提供两个选项,自动帮助安装或是新版本提醒,由用户来决定是否升级,都属于远程升级的应用及策略。 看看经过这块的功能了解及…...
同旺科技USB to SPI 适配器 ---- 指令循环发送功能
所需设备: 内附链接 1、同旺科技USB to SPI 适配器 1、周期性的指令一次输入,即可以使用 “单次发送” 功能,也可以使用 “循环发送” 功能,大大减轻发送指令的编辑效率; 2、 “单次发送” 功能,“发送数据…...
用 Pinia 点燃 Vue 3 应用:状态管理革新之旅
一、状态管理的范式转移:从 Flux 到 Composition ### 1.1 Vuex 的辉煌与局限 - **核心架构**:基于Flux模式的state/mutations/actions三件套 - **痛点显现**: - 类型推导困难:TypeScript支持需复杂配置 - 模块嵌套陷阱&#…...
单表达式倒计时工具:datetime的极度优雅(Kimi)
一个简单表达式,也可以优雅自成工具。 笔记模板由python脚本于2025-03-22 20:25:49创建,本篇笔记适合任意喜欢学习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。 Pyth…...
