当前位置: 首页 > news >正文

【Python】列表 元组 字典 文件

目录

列表

创建列表

切片操作

遍历列表

新增元素

查找元素

删除元素

连接列表

元组

创建元组

列表和元组的区别

字典

创建字典

遍历字典

查找key

新增键值对

修改value

删除键值对

文件

打开文件

关闭文件

写文件

读文件

上下文管理器


列表

列表:[element, element, ...] 列表里面 可以存放不同类型的变量

创建列表

[] / [element, element, ...] 直接进行创建

list() 声明某个变量是列表

# 创建列表
x =[]
a = [1, 2, 3, 4]
b = list()
print(type(a))
print(type(b))

切片操作

切片操作:不涉及数据拷贝,只是从原列表中取数据,所以切片操作很高效

list[start : end : step_size] 切片是一个左闭右开的区间[start:end)

start:从列表的哪一个下标开始切,如果不写,默认是从0下标开始

end:在列表的哪个下标结束,如果不写,默认是最后一个下标len(list)

step_size:每次切走几步,不写则是默认走一步

a = [1, 2, 3, 4]
print(a[1:3]) #下标[1, 3)
print(a[::-1])
print(a[-1::-1])
print(a[:-1:1])

遍历列表

# 遍历
a = [1, 2, 3, 4]
for i in a:i += 10print(i) #修改i是不会改变原列表的值
print(a)i = 0
while i < len(a):print(a[i]) # 下标遍历 修改值 原列表发生改变i += 1

新增元素

append 向列表末尾新增元素append(element)

insert 向列表任意位置插入元素insert(index, element)

如果使用insert进行新增,index下标超出了列表下标范围,不会抛出异常,会在列表末尾新增元素

a = [1, 2, 3, 4]
for i in range(5, 10):a.append(i) # 向列表的末尾新增元素
print(f"append新增后:{a}")a.insert(5, 10)
a.insert(10, 20)
print(f"insert新增后:{a}")

查找元素

in 判断元素是否存在与列表中 not in不存在

index 判断当前元素在列表中的位置,并返回下标

index(element) 如果元素没有在列表当中,则会直接抛出异常

a = [1, 2, 3, 4]
print(f"4是否在a列表中:{4 in a}")
print(f"20不在a列表中:{20 not in a}")print(f"20所在下标:{a.index(20)}") # 元素没有在列表 则会抛出异常

删除元素

pop 删除列表中最末尾的值

pop(index) 能删除任意位置的值

remove 按照指定值进行删除 remove(element),列表中没有指定元素,则会抛出异常

a = [1, 2, 3, 4]
a.pop()
print(f"a列表使用pop()删除末尾值后:{a}")
a.pop(2)
print(f"使用pop(index) 删除指定下标元素:{a}")
a.remove(10)
print(f"remove(element) 指定元素删除值:{a}") # 列表中没有指定元素 则会抛出异常

连接列表

+ 使用加号 将两个列表进行拼接, += 涉及数据拷贝和数据释放

extend 将后一个列表,拼接到前一个列表里面 extend(list)

a = [1, 2, 3, 4]
b = list()
for i in range(20, 100, 10):b.append(i)c = a + b
print(f"使用+ 新列表的拼接值:{c}")a.extend(b)
print(f"使用extend(list) 将list直接拼到原列表:{a}")a += b
print(f"涉及数据拷贝与释放 不像extend直接拼接:{a}")

元组

元组:(element, elemnet, ...) 元组里面,可以存放不同类型的变量,和列表一样

创建元组

() / (element, element, ...) 直接进行创建

tuple() 声明某个变量是元组

# 创建元组
x = (1, 2, 3, 4)
y = tuple()
print(type(x))
print(type(y))# 遍历
for i in x:print(i)for i in range(0, len(x)):print(x[i])# 查找
print(5 in a)
print(x.index(4))

列表和元组的区别

相同点:元组的遍历、切片、拼接都是和列表相同

不同点:列表使用的是[],元组使用的是(),列表用list声明,元组用tuple声明

列表支持:增、删、改、查

元组只支持读操作,不支持修改操作,所以元组是不可变对象,可以哈希

字典

字典中,可以包含很多键值对,但是键不能够重复

字典的各种操作,都是针对key来进行操作的

字典是哈希表,进行增、删、改、查操作,效率都非常高,但是遍历效率稍微低些

合法的key类型

使用hash函数,能够计算出一个变量的哈希值,则就是一个合法的key

可变的类型是不能计算出hash值,例如列表、字典就不能作为key

不可变的才能计算出hash值,例如常数、字符串、元组就能作为key

创建字典

{ } / {key:value, key:value, ...} 创建字典,键值对使用逗号进行分割,使用冒号将键和值进行分割

dict() 声明某个变量是字典

# 创建字典
a = {}
b = {"id": 1,"name":"张三","gender":"男",
}
c = dict()print(type(a))
print(type(b))
print(type(c))

遍历字典

keys() 获取到所有的keys

values() 获取到所有的values

items() 获取到所有键值对,首先是一个列表结构,里面的每一个元素又是一个元组,元组里面包含了键和值

在python中,遍历顺序和插入顺序是一致的;但是c++和Java中,哈希表里的键值对,存储顺序都是无序的

# 遍历字典
b = {"id": 1,"name":"张三","gender":"男",
}print(f"keys() 方法,拿到了所有key:{b.keys()}")
print(f"values() 方法,拿到了所有value:{b.values()}")
print(b.items())for key in b:print(key, b[key]) # 循环遍历 拿到的是字典里的key 再通过key拿到value

查找key

in 使用in,判断key,是否存在与字典中,not in不存在

[key] 根据key,获取到value,则会返回value值;当key不存在时,则会抛出异常

# 查找key
b = {"id": 1,"name":"张三","gender":"男",
}
print(f"判断name这个key,是否在字典b中:{'name' in b}")
print(f"判断gender这个key,是否在字典b中:{'gender' not in b}")
value1 = b["id"]
value2 = b["name"]
value3 = b["gender"]
print(value1, value2, value3)

新增键值对

[ ] 向字典中新增键值对,dict_variable[key] = value

字典变量[key] = value

# 新增键值对
a = {}
a["id"] = 2
a["name"] = "李四"
a["gender"] = "男"
print(a.items())

修改value

[ ] 根据key修改value,也是使用[ ],dict_variable[key] = value

key不存在,向字典中写入,就是新增

key存在,向字典中写入,就是根据key修改value值

# 修改value
b = {"id": 1,"name":"张三","gender":"男",
}
b["name"] = "王五"
b["gender"] = "女" # 字典中key存在,则是修改原value值
b["address"] = "python" # 字典中key不存在,则是新增键值对
print(b.items())

删除键值对

pop() 根据key,删除value值,pop(key)

# 删除键值对
b = {"id": 1,"name":"张三","gender":"男",
}
print(f"没有删除前:{b.items()}")
b.pop("id")
b.pop("gender")
print(f"pop删除后:{b.items()}")

文件

内存:变量就是存放在内存中(内存空间小、访问速度快、成本高、数据易丢失)

硬盘:文件就是存放在硬盘中(硬盘空间大、访问速度慢、成本低、数据持久化存储)

打开文件

open() 打开一个文件,会返回一个文件对象

open("c:/W_code/python/文件" , r) 第一个参数是:文件在硬盘上的路径;第二个参数是:打开方式

r:read 读方式打开

w:write 写方式打开,会清空掉文件原有内容,重新写入内容

a:append 写方式打开,将新内容写到原有内容后面,不会清空原内容

打开文件是在硬盘上,会返回一个文件对象是在内存上,通过操作这个内存上的变量,修改硬盘上的内容,这种远程操控遥控器,称为“句柄”handler

# 打开文件
file = open("C:/W_Code/python/file.txt", "r")
print(file)
file.close()

关闭文件

close() 关闭文件

文件在使用完后,一定要关闭;打开文件就是在申请一定的系统资源,不及时释放文件,可能造成文件资源泄露

写文件

write() 实现写文件操作

写文件,如果不是使用w或r,这样的写方式打开,则会抛出异常

w:write方式打开,会清空文件原有内容,重新写入内

a:append方式打开,新内容写到原内容后面,不会清空原有内容

# 写文件
file = open("C:/W_Code/python/file.txt", "w", encoding="utf-8")
file.write("w 打开方式,清空原内容,写入新内容\n")
file.close()file = open("C:/W_Code/python/file.txt", "a", encoding="utf-8")
file.write("a 新内容写到原内容后面,不会清空原有内容")
file.close()

读文件

read() 读文件内容,可以指定读几个字符;也可以按行进行读取,使用for循环

readlines() 读取文件所有内容,按照行组织到列表当中

# 读几个字符
file = open("C:/W_Code/python/file.txt", "r", encoding="utf-8")
result = file.read(4) # 表示读到的是4个字符,一个汉字就是一个字符
print(result)
file.close()# 按行读取
file = open("C:/W_Code/python/file.txt", "r", encoding="utf-8")
for line in file:print(f"line:{line}", end="")# 一行内容的末尾是有一个\n的,print打印也会加一个\n,则打印出的内容会多一行空行# 可以通过修改print参数来解决空行问题,end = ''的默认参数是\n,此时可以改为空字符串
file.close()# readlines()
file = open("C:/W_Code/python/file.txt", "r", encoding="utf-8")
print()
lines = file.readlines()
print(lines)
file.close()

上下文管理器

当with对应的代码块执行结束,就会自动将文件close

目的:就是要及时释放资源,避免资源泄露

# 上下文管理器
with open("C:/W_Code/python/file.txt", "r", encoding="utf-8") as file:print("只要with里面的代码执行完,就会将file自动close")
http://www.dtcms.com/a/478507.html

相关文章:

  • 简单asp网站深圳做个商城网站设计
  • OpenTelemetry 入门
  • 昆山做网站找哪家好wordpress 算数验证码
  • 网站建设服务费入阿里云域名注册平台
  • 美颜的灵魂:磨皮技术的演进与实现原理详解
  • 自定义半精度浮点数modelsim仿真显示
  • 广东GEO优化哪家专业哪家服务好
  • 【C#】await Task.Delay(100)与Thread.Sleep(100)?
  • 从智能补全到云原生适配:免费IDE DataGrip的技术实践与行业趋势
  • 多摄像头网络压力测试
  • 信息发布网站设计巴中网站建设有限公司
  • 图像处理-opencv(一)
  • 空包网站分站怎么做重庆市工程建筑造价信息网
  • 基于MATLAB的Excel文件批量读取与循环处理
  • 网站建设方案拓扑图平面设计现在怎么样
  • 高并发下的优雅延迟:Python异步爬虫(aiohttp)的速率限制实践
  • Python爬虫实战:获取同花顺股票资金流向数据并做分析
  • MyBatis的SpringBootVFS解析
  • 上海网站建设好处自建网站教程
  • 网站建设的作用是什么网站建设沟通准备
  • 【中间件Linux在环境安装】SpringBoot应用环境安装(一)-JDK安装
  • 【Linux环境下安装】SpringBoot应用环境安装(二)-Redis安装
  • 如何设置 Visual Studio 在调试停止时自动关闭控制台
  • 网站建设佰首选金手指三十wordpress 切换中文字体
  • 网站搭建服务器需要多少钱厦门网站建设u
  • MPLS技术详解2:LDP标签分发协议原理与操作流程
  • 网站跟别的做的一样的网站群怎么做
  • java注解+AOP切面:实现sql片段动态插入
  • 网络安全超详细系统教程、渗透测试与学习路线(2025年最新版)
  • 靖江网站制作多少钱网站的衡量标准