python基础——数据的访问

本文详细介绍了Python中基本数据结构如列表、元组、字典和集合的访问方法,包括下标访问、切片、增删改查、排序、深浅拷贝等操作,并举例说明了各种操作的使用场景和注意事项。同时,还涵盖了如何处理不存在的键值和集合操作,以及列表和元组的特殊操作。通过对这些基础知识的掌握,能帮助读者更好地理解和运用Python数据结构。
摘要由CSDN通过智能技术生成

数据的访问

基本类型的访问:

直接根据变量名去访问

元组和列表的数据访问:

1、根据下标去访问

list_data = [1,2,3,(3,4,5,),7,] print(list_data[0]) print(list_data[3][2]) 输出结果: 1 5

2、add,只能元组与元组之间,列表与列表之间相加,否则会出现类型错误

tuple_data = (1,2,3,4)
tuple_data1 = (4,5)
tuple_data2 = tuple_data.__add__(tuple_data1)
1print(tuple_data)
2print(tuple_data1)
3print(tuple_data2)
tuple_data3= tuple_data2+tuple_data#可以直接使用“+”
4print(tuple_data3)
tuple_data.__add__(tuple_data3)#相加的结果需要定义一个新元组去接收
5print(tuple_data)
输出结果:
1(1, 2, 3, 4)
2(4, 5)
3(1, 2, 3, 4, 4, 5)
4(1, 2, 3, 4, 4, 5, 1, 2, 3, 4)
5(1, 2, 3, 4)

3、*元组只能与整型相乘,否则会出现类型错误

tuple_data = (1,2,3,4)
tuple_data2 = tuple_data*2
print(tuple_data2,type(tuple_data2))
输出结果:
(1, 2, 3, 4, 1, 2, 3, 4) <class 'tuple'>

4、conut:统计某个元素在元组或列表中出现的次数,元组或列表内的元组或列表中的元素无法统计

tuple_data = (1,2,2,2,3,4)
print(tuple_data.count(2))
print(tuple_data.count(6))#统计不在元组中的元素
输出结果:
3
0
list_data = [1,2,4,[3,3,4,5,],7,]
print(list_data.count(3))#列表内部的列表元素无法统计
tuple_data =(1,2,4,[3,3,4,5,],7,)
print(tuple_data.count(3))#元组内部的列表中的元素无法统计
输出结果:
0
0

5、index:输出检索到元组或列表中某个元素的第一个下标,检索不到时会报错如:TypeError: index expected at least 1 argument,预期至少有一个参数,元组或列表中的元组或列表中的元素不能用index检索到

tuple_data = (1,2,2,2,3,4,)
print(tuple_data.index(2))
print(tuple_data.index(4))
输出结果:
1
5

6、append:在列表的末尾添加一个元素,该元素可以列表元组等其他数据类型,但只能是一个元素,超过一个会出现错误:TypeError: list.append() takes exactly one argument (2 given)只接受一个参数

list_data = [1,2,4,[3,3,4,5,],7,]
list_data.append(8)
print(list_data)
list_data.append(("元素"))
print(list_data)
输出结果:
[1, 2, 4, [3, 3, 4, 5], 7, 8]
[1, 2, 4, [3, 3, 4, 5], 7, 8, '元素']

7、clear:从列表中移除所有元素,不接受参数给定

list_data = [1,2,4,[3,3,4,5,],7,]
list_data.clear()
print(list_data)
输出结果:
[]

8、extend:通过从可迭代对象(包含序列的数据类型)中添加元素扩展list,

list_data = [1,2,4,[3,3,4,5,],7,]
list_data.extend(("可迭代的数据类型"))
print(list_data)
list_data.extend({1:2,3:4})#只在列表上扩展了key???
print(list_data)
输出结果:
[1, 2, 4, [3, 3, 4, 5], 7, '可', '迭', '代', '的', '数', '据', '类', '型']
[1, 2, 4, [3, 3, 4, 5], 7, '可', '迭', '代', '的', '数', '据', '类', '型', 1, 3]

list_data = [1,2,4,[3,3,4,5,],7,]
list_data.extend([("可迭代的")])#只有通过列表迭代的元素可以是个序列???
print(list_data)
list_data.extend((("数据类型")))
print(list_data)
输出结果:
[1, 2, 4, [3, 3, 4, 5], 7, '可迭代的']
[1, 2, 4, [3, 3, 4, 5], 7, '可迭代的', '数', '据', '类', '型']

9、copy:浅拷贝,不接受参数给定,只拷贝列表的空间,不拷贝元素的空间(也就是拷贝的列表中的元素和原列表的元素属于同一空间,同一磁盘地址)

list_data = [1,2,4,[3,3,4,5,],7,]
list_data1= list_data.copy()
1print(list_data1)
2print(id(list_data))
3print(id(list_data1))
4print(id(list_data1[3]))
5print(id(list_data[3]))
list_data1[3][0]=2#在拷贝的列表上修改数据类型为列表的元素中的元素,原列表也发生变化
6print(list_data1)
7print(list_data)
list_data1[0]=9#修改数据类型为基本数据类型的元素,原列表不发生改变
8print(list_data1)
9print(list_data)
输出结果:
1[1, 2, 4, [3, 3, 4, 5], 7]
21366598126400
31366598115264
41366598112448
51366598112448
6[1, 2, 4, [2, 3, 4, 5], 7]
7[1, 2, 4, [2, 3, 4, 5], 7]
8[9, 2, 4, [2, 3, 4, 5], 7]
9[1, 2, 4, [2, 3, 4, 5], 7]

10、深拷贝,与浅拷贝不同的是将列表中序列的元素的空间也拷贝了

from copy import deepcopy#导入deepcopy模块
list_data = [1,2,4,[3,3,4,5,],7,]
copy_list= deepcopy(list_data)
1print(copy_list)
2print(id(list_data))
3print(id(copy_list))
4print(id(copy_list[3]))
5print(id(list_data[3]))
copy_list[3][0]=2#在深拷贝的列表上修改数据类型为列表的元素中的元素,原列表不发生变化
6print(copy_list)
7print(list_data)
输出结果:
1[1, 2, 4, [3, 3, 4, 5], 7]
22770667138496
32770667331200
42770667330944
52770667185600
6[1, 2, 4, [2, 3, 4, 5], 7]
7[1, 2, 4, [3, 3, 4, 5], 7]

11、insert: 在列表中指定的下标位置插入元素,可以插入不同的数据类型的元素

list_data = [1,2,3,4,5]
list_data.insert(5,6)#在下标5处添加元素6
print(list_data)
list_data.insert(0,0)#在下标0处添加元素0
print(list_data)
输出结果:
[1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]

12、pop:Remove and return item at index (default last)——删除并返回索引处的项目(默认为last),参数为下标,可以删除列表中的为复杂数据类型的元素,检索超出范围时会报错

list_data = [1,2,3,4,5]
print(list_data.pop())
print(list_data.pop(3))
print(list_data)
输出结果:
5
4
[1, 2, 3]

13、remove:Remove first occurrence of value——移除第一次检索出现的值,参数为列表中的元素,当参数不在列表中时会报错

list_data = [1,2,3,4,5]
list_data.insert(2,[2,2,2])

print(list_data)
list_data.remove([2,2,2])
print(list_data)
输出结果:
[1, 2, [2, 2, 2], 3, 4, 5]
[1, 2, 3, 4, 5]

14、reverse:倒序排列列表里的元素,不传参

list_data = [1,2,3,4,5]
list_data.reverse()
print(list_data)
list_data.reverse()
print(list_data)
输出结果:
[5, 4, 3, 2, 1]
[1, 2, 3, 4, 5]

15、sort:按升序对列表进行排序,返回None。排序是原位的(即列表本身被修改)和稳定的(即保持两个相等元素的顺序)。如果给定了键函数,则对每个列表项应用一次,并根据它们的函数值升序或降序排序。可以将反向标志设置为降序排序。

list_data = [1,2,3,4,5]
list_data.sort(reverse=True)#倒序
print(list_data)
list_data.sort()#默认reverse=False顺序
print(list_data)
list_data.sort(reverse=False)
print(list_data)
输出结果:
[5, 4, 3, 2, 1]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

list_data = ["231","908","345","876","432","563","934"]
def sort_key(value):#定义取出元素中下标为1的数为参数的函数
    return value[1]
list_data.sort(key=sort_key)#调用函数为为参数进行排序
print(list_data)
输出结果:
['908', '231', '432', '934', '345', '563', '876']

字典数据的访问:

1、使用key值去访问

dict_data = {"condition":"条件","format":"格式","break":"打破"}
print(dict_data["condition"])
print(dict_data["format"])
print(dict_data["break"])
输出:
条件
格式
打破


dict_data = {"condition":"条件","format":"格式","break":"打破"}
print(dict_data["continue"])#访问一个字典中不存在的key
print(dict_data["condition"])
print(dict_data["format"])
print(dict_data["break"])
输出:KeyError: 'continue'#直接去访问一个字典中不存在的key时,会出现报错,影响程序的运行,建议使用下面的get去访问字典中的数据

2、.get:使用get去访问dict中的数据时,即使get的key不存在,dict中也不会报错,会返回一个“None”,None是默认的返回值可以修改

dict_data = {"condition":"条件","format":"格式","break":"打破"}
print(dict_data.get("condition"))
print(dict_data.get("break"))
print(dict_data.get("format"))
print(dict_data.get("continue"))#使用get去访问字典中不存在的key
print(dict_data.get("continue","Test"))#将返回的默认值“None”改为“Test”
输出:
条件
打破
格式
None
Test

3、keys:访问字典中所有的key

dict_data = {"condition":"条件","format":"格式","break":"打破"}
print(dict_data.keys())#访问字典中所有的key
输出:dict_keys(['condition', 'format', 'break'])

4、values:访问字典里所有的value

dict_data = {"condition":"条件","format":"格式","break":"打破"}
print(dict_data.values())#访问字典中所有的value
输出:dict_values(['条件', '格式', '打破'])

5、items:访问字典里所有的元素

dict_data = {"condition":"条件","format":"格式","break":"打破"}
print(dict_data.items())#访问字典中所有的元素
输出:dict_items([('condition', '条件'), ('format', '格式'), ('break', '打破')])

6、update:字典合并

dict_data = {"condition":"条件","format":"格式","break":"打破"}
dict_data1 = {"continue":"继续"}
dict_data.update(dict_data1)#将dict_data1更新到dict_data中
print(dict_data)
print(dict_data1)
输出:{'condition': '条件', 'format': '格式', 'break': '打破', 'continue': '继续'}

{'continue': '继续'}#dict_data1 还在

集合的数据访问:

1、set.discard () 删除集合中某个元素,如果集合中存在该元素则删除,不存在该元素则什么都不做

set_data = {1,2,3,4}
set_data.discard(4)
print(set_data)
set_data.discard(5)#不报错
print(set_data)
#set_data.discard[1]#使用下标去删除元素会报错
输出:{1, 2, 3}
     {1, 2, 3}

2、add:向集合中添加元素,只能添加单个元素

set_data = {1,2,3,4}
set_data.add(1)#添加重复元素无反应
print(set_data)
set_data.add(5)
print(set_data)
输出:{1, 2, 3, 4}
     {1, 2, 3, 4, 5}

3、集合不可以使用下标访问,使用下标访问会报错
TypeError: ‘set’ object is not subscriptable('set’对象是不可下标的)

切片

可以用来在列表中获取一段数据,python可以使用负值的下标去访问数据。适用于列表和元组

list_data = [1,2,3,4,5,6,7,8,9,0,"E",11]
1print(list_data)
2print(list_data[-1])#使用负的下标去访问
3print(list_data[0:11])#使用切片获取下标大于等于0到小于11的这段数据
#print(list_data[start:stop:step])
#start 开始,默认值为0,stop、结束,默认为最大下标,step、步幅,默认值为+1
4print(list_data[::-1])#这个负一是指检索数据的方向为负,步幅为一
5print(list_data[2:])
6print(list_data[2::-1])
7print(list_data[8::-2])
8print(list_data[2:19])
9print(list_data[13:19])#起点大于序列最大下标,不报错,输出为空
10print(list_data[2::-22])#步幅超过起点到终点序列数,不报错只输出起点下标对应的数据
11print(list_data[3::-22])
输出:
1[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'E', 11]
211
3[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'E']
4[11, 'E', 0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
5[3, 4, 5, 6, 7, 8, 9, 0, 'E', 11]
6[3, 2, 1]
7[9, 7, 5, 3, 1]
8[3, 4, 5, 6, 7, 8, 9, 0, 'E', 11]
9[]
10[3]
11[4]

赋空值

none_data = None
print(none_data,type(none_data))
tuple_data = ( )
print(tuple_data,type(tuple_data))
list_data = [ ]
print(list_data,type(list_data))
dict_data ={ }
print(dict_data,type(dict_data))
set_data= { }
print(set_data,type(set_data))
set_data=set( )
print(set_data,type(set_data))
输出:
None <class 'NoneType'>
() <class 'tuple'>
[] <class 'list'>
{} <class 'dict'>
{} <class 'dict'>
set() <class 'set'>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值