Python基础(三)——列表,元组,字典

一.列表

1.1 什么是列表

列表是一种有序的,可变的数据结构。列表由元素构成,每个元素对应一个下标(index),元素可以为任何类型。

列表嵌套会形成矩阵(二维数组)

1.2 列表如何定义及特性

[]包住,元素间用 , 隔开

属于可变类型,支持增删改查,查看长度

#创建空列表
list_test = list() #或者list_test = []
#添加元素
list_test.append('hello')
list_test.append(10)
list_test.append([1,2,3])
list_test.append(66)
print(list_test)
#插入元素
list_test.insert(1,100) #参数分别为插入的位置,插入的值
print(list_test)
#修改元素
list_test[2] = 66
list_test[0:2] = ['xinxin',0] #如果插入的数量大于切片,会继续顺延
print(list_test)
#查找元素
print(list_test[3])
print(list_test[0:3])
#删除元素
list_test.pop(1)  #基于下标删除,参数值为下标,默认删除最后一个。会返回删除的值
list_test.remove(66) #基于数据值删除,但是只匹配查找到的第一个值
del list_test[1:2]  #基于索引位置删除
list_test.clear()  # 清空整个列表
print(list_test)
del list_test #删除列表

1.3列表常用操作

1.3.1 列表合并

两种方法:
1.利用+合并,实际是赋值给新变量
2.利用extend,这个方法直接改变了原列表

list_1 = [1,2,3,4]
list_2 = [5,6,7,8,9]
list_join = list_1 + list_2
print(list_join)
list_1.extend(list_2)
print(list_1)

1.3.2 列表排序

正序:sort()倒序:sort(reverse = True)
临时排序:sorted(),不会改变原列表

list_1 = [1,100,300,4]
list_1.sort(reverse = True)
print(list_1)

1.3.3 列表反转

list_1 = ['我','爱','你']
list_1.reverse()
print(list_1)

1.3.4 列表元素数量统计

统计元素出现的个数

list_2 = [5,6,7,6,8,6,9]
print(list_2.count(6))

1.3.5自身复制

list_2 = [5,6,7,6,8,6,9]
new_list_2 = list_2 * 2
print(new_list_2)

1.3.6 列表长度

list_2 = [5,6,7,6,8,6,9]
print(len(list_2))

1.3.7列表复制

分位浅复制深复制
深复制需引入copy库

#浅复制
list_old = [[1,2,3],[4,5,6]]
list_shallow = list_old.copy()
print(id(list_old))
print(id(list_shallow))
print(id(list_old[0]))
print(id(list_old[0]))

#执行结果
140684084155968
140684084155840
140684085061056
140684085061056
我们会发现最外层确实复制了,新列表分配了新的地址。但是内层列表地址还是相同的
#深复制
import copy
list_old = [[1,2,3],[4,5,6]]
list_deep = copy.deepcopy(list_old)
print(id(list_old))
print(id(list_deep))
print(id(list_old[0]))
print(id(list_deep[0]))
#运行结果
140150716196736
140150716196096
140150716026048
140150716196800
内外层地址都不同

1.3.8内部元素处理

#元素合并
list_join = ['I','love','you']
print(' '.join(list_join))      #引号内是连接方式

#元素拆分
list_split = ['你好,我是名学生,我正在学习Python']
new_list = list_split[0].split(',')  #引号内是分割方式
print(new_list)

#去掉重复元素
list_1 = [1,2,3,4,5,1,5,3,2]
print(set(list_1))

1.3.9 列表解析

将想要新生成的数据代码和for循环,if等写在一起写在一起

list_1 = [value*2 for value in range(1,11) if value%2==0]
print(list_1)

[规则 for循环 if控制]

list_1 = [(x,y) for x in [1,2,3] for y in [4,5,6]]
print(list_1)

相当于两个for循环嵌套,将数据组合成元组
如果有多个返回值,用多元数据结构返回
当对元组使用解析时,最终输出的结果不是原始类型,是生成器,后续会讲

解析方法同样适用于字典

fields = ['姓名','年龄','城市']
info = ['xx',22,'赤峰']
print(dict(zip(fields,info))) #用zip函数对两组数据进行压缩,返回的是对象,我们可以转换成list,dict查看

#字典解析
dict_1 = {x:y for x,y in zip(fields,info)}
print(dict_1)

二.元组

2.1 什么是元组

与列表类似,但是内部值不可更改,也就不支持增删改。用()包住

创建只有一个元素的元组时,要在第一个元素后面加一个逗号
支持不加括号创建
需要改元组数据时,可以转换为列表操作

2.2 元组列表对比

对比图元组优点:

  • 大型数据处理速度快
  • 对数据有保护功能
  • 当函数返回多个值时,一般以元组方式返回

三.字典

3.1 什么是字典

储存具有一系列映射关系的数据结构,映射关系称为键值对(key:value),在pytohn中称item,全部键值对就是items
{}包住,键值对间逗号隔开

test = {'name':'xinxin','age':20}

3.2字典特性

2不准:不准改变键,键不准重复
4支持:增删键和值,基于键改变值,基于键查询
2注意:只能使用不可变类型作为键;通常不使用数字作为键

3.3创建方法

dict_1 = dict()
dict_2 = dict{}
dict_3 = {'name':'xinxin','age':20}
dict_4 = dict({'name':'xinxin','age':20})
dict_5 = dict(name='mike',age=20)

基于列表建立字典

keys = ['姓名','年龄','祖籍']
new_dict = dict.fromkeys(keys,可以设置值,不设置默认none)
print(new_dict)

3.4增删改查

dict_1 = {'name':'xinxin','age':20}
#增加数据
dict_1['gender'] = '男'
print(dict_1)
#修改数据
dict_1['age'] = '22'
print(dict_1)
#查询数据
dict_1['name']
dict_1.get('name')  #没找到会返回None
#删除数据
del dict_1['gender']
print(dict_1)
dict_1.pop('age')  #必须有参数
print(dict_1)
dict_1.clear()  #清空字典
print(dict_1)

3.5常用操作

3.5.1 返回字典的键值对,键,值

#返回键值对
dict_1 = {'name':'xinxin','age':20}
for k,v in dict_1.items():
    print(k,v)

#返回键
dict_1 = {'name':'xinxin','age':20}
for k in dict_1.keys():
    print(k)

#返回值
dict_1 = {'name':'xinxin','age':20}
for v in dict_1.values():
    print(v)

3.5.2 字典合并

dict_1 = {'name':'xinxin','age':20}
dict_2 = {'name':'Jane','age':20,'gender':'女'}
dict_1.update(dict_2)
print(dict_1)

有重复的key,就会更新key值,没有就会添加

3.5.3 查询键,不存在则添加

dict_1 = {'name':'xinxin','age':20}
print(dict_1.setdefault('gender',可设置值))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的鑫仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值