Python中高级数据存储及应用

994 阅读11分钟

1. 列表

1.1列表的概念

列表是一种存储大量数据的存储模型。

1.2列表的特点


1.3 列表的基本语法

创建列表: 变量名 = [数据1,数据2,……]

获取列表数据: 变量名[索引]

修改列表数据: 变量名[索引] = 值

list1 = [1,2,3,'Tom','Joe','True','None']
print(list1[4]) # 获取列表指定索引的数据
list1[4] = 'Alin'  #修改列表中指定索引的数据

1.4 列表常用方法

方法名功能参数返回值范例
append(data)关键词:追加在列表的末尾添加数据data:加入到列表中的数据Nonelist1 = [1,2,3] list1.append("Tom")
insert(idx,data)关键词:插入在列表的指定位置插入数据,如果索引位置超过列表数据总量,数据将插入到列表末尾idx:插入数据的索引位置data:加入列表中的数据Nonelist1 = [1,2,3] list1.insert(0,"Tom")
extend(model)关键词:追加全部在列表的末尾添加参数对象中的所有数据model:保存有数据的存储模型,该模型接受列表、元组、集合类型的对象Nonelist1 = [1,2,3] list2 = [4,5,6] tuple2 = (7,8,9) set2 = {10,11,12} list1.extend(list2) list1.extend(tuple2) list1.extend(set2)
remove(data)关键词:删除从列表中删除指定的数据,如果数据不存在将报错data:要从列表中删除的数据Nonelist1 = [1,2,3,"Tom"] list1.remove("Tom")
pop(idx)关键词:获取删除从列表中获取并删除指定索引位置上的数据,如果索引值超过列表数据总量将报错idx:要从列表中获取的数据对应的索引位置获取到的数据list1 = [1,2,3,"Tom"] data = list1.pop(2)
clear()关键词:清空清空列表中的数据Nonelist1 = [1,2,3,"Tom"] list1.clear()
index(data)关键词:查询位置查询列表中指定数据对应的索引,如果数据不存在将报错data:在列表中要查询的数据查询数据第一次出现的索引list1 = [1,2,3,"Tom"] idx = list1.index("Tom")
count(data)关键词:统计数量统计列表中指定数据出现的数量data:在列表中要统计数量的数据统计数据出现的次数list1 = [1,2,3,"Tom"] num = list1.count("Tom")

2. 元组

2.1 元组的概念

元组是一种存储固定数据的存储模型。

2.2 元组的特点


2.3 元组的基本语法

创建元组: 变量名 = (数据1,数据2,……)

获取元组数据: 变量名[索引]

tuple1 = (1,2,3,"Tom",True,False)
print(tuple1[4])  # True
print(tuple1)
tuple2 = (100,)
print(tuple2)


2.4 元组常用方法

方法名功能参数返回值范例
index(data)关键词:查询位置查询元组中指定数据对应的索引,如果数据不存在将报错data:在元组中要查询的数据查询数据第一次出现的索引tuple1 = [1,2,3,"Tom"]    idx = tuple1.index("Tom")
count(data)关键词:统计数量统计元组中指定数据出现的数量data:在元组中要统计数量的数据统计数据出现的次数tuple1 = [1,2,3,"Tom"]    num =tuple1.count("Tom")

2.5 注意事项

元组中的数据如果是非引用类型数据,不允许修改。

元组中的数据如果是引用类型对象,该对象不允许替换,而对象的属性值可以发生改变。

2.6 元组的特殊应用

自动组包:将多个数据赋值给一个变量时,多个数据将包装成一个元组,将元组赋值给变量,该过程称为自动组包。

应用场景:设置返回值为多个值。

return 1,2,3    等同于 return (1,2,3)

应用场景:动态字符串赋值传值方式。

print(“坐标%d,%d” % (10,20))

自动解包:将元组赋值给多个变量时,如果元组数据的数量与变量的数量相同,元组将被自动拆分成多个值,并赋值给对应变量,该过程称为自动解包。

应用场景:多个变量接收返回值

a,b,c = func()等同于 a,b,c = (1,2,3)等同于a,b,c = 1,2,3

3. 集合

3.1 集合的概念


3.2集合的特点

集合没有索引的概念。集合中的数据可以进行添加、删除等操作。

3.3 集合的基本语法

创建集合:变量名 = {数据1,数据2,……}

set3 = {True,1,2,3,0,False,4,5,1,2,5}   # 数值非0表示True# 
输出: {0, True, 2, 3, 4, 5}  

3.4 集合常用方法

方法名功能参数返回值范例
add(data)关键词:添加在集合中添加数据data:加入到集合中的数据Noneset1 = {1,2,3} set1.append("Tom")
remove(data)关键词:删除从集合中删除指定的数据,如果数据不存在将报错data:要从集合中删除的数据Noneset1 = {1,2,3,"Tom"} set1.remove("Tom")
pop()关键词:获取删除从集合中获取并删除第一个数据获取到的数据set1 = {1,2,3,"Tom"} data = set1.pop()
clear()关键词:清空清空集合中的数据Noneset1 = {1,2,3,"Tom"} set1.clear()

4. 字典

4.1 字典的概念


4.2 字典的特点

字典不具有索引的概念,字典使用键key代替索引,可以通过键操作字典中存储的数据值value。字典可以根据键key进行数据的添加、删除、修改、查询操作。

4.3 字典的基本语法

创建字典: 变量名 = {键1:值1,键2:值2,……}

添加数据: 变量名[键] = 值 (字典中没有对应的键)

获取数据: 变量名[键]

修改数据: 变量名[键] = 值 (字典中存在对应的键)

dict = {'Name': '张三', 'Age': 17, 'Class': '高三一班'}
print("dict['Name']:%s "% dict['Name'])  # 取值
print("dict['Age']:%s "% dict['gender'])
​dict['gender'] = '男' # 增加键值对
dict['Age'] = 18 # 修改键值对,原先的值会被替换
dict.pop('class') # 删除class​dict.clear() # 清空字典

4.4 字典常用方法

方法名功能参数返回值范例
pop(key)关键词:删除获取从字典中删除指定键key对应的键值对,如果键key不存在将报错key:要删除的值value对应的键key被删除的值valuedict1 = {"name":"Tom","age":11} v = dict1.pop("name")
popitem()关键词:删除从字典中删除指定键key对应的键值对,如果键key不存在将报错key:要删除的键值对对应的键key,实际测试里面不能带参数被删除的键值对,以元组的形式返回dict1 = {"name":"Tom","age":11} v = dict1.popitem()
clear()关键词:清空清空字典中的数据Nonedict1 = {"name":"Tom","age":11} dict1.clear()
setdefault(key,value)关键词:检测添加添加新的键值对,如果存在对应的键,则忽略该操作key:要添加的新键值对对应的键keyvalue: 要添加的新键值对对应的值value字典中key对应的值,如果是添加则返回参数value,如果不是添加,返回原始key对应的valuedict1 = {"name":"Tom","age":11} dict1.setdefault("age",22)
update(dict)关键词:更新数据使用新字典中的数据对原始字典数据进行更新dict:新字典对象Nonedict1 = {"name":"Tom","age":11} dict2 = {"address":"北京","age":22} dict1.update(dict2)
get(key)关键词:获取根据键key查询字典中对应的值,如果键key不存在将返回Nonekey:要查询的键key根据键key在字典中查询的值valuedict1 = {"name":"Tom","age":11} v = dict1.get("age")
keys()关键词:获取键列表获取字典中所有的键key组成的列表数据由所有键组成的列表dict1 = {"name":"Tom","age":11} dict1.keys()
values()关键词:获取值列表获取字典中所有的值value组成的列表数据由所有值组成的列表dict1 = {"name":"Tom","age":11} dict1.values()
items()关键词:获取键值对列表获取字典中所有的键值对列表数据由键值对组成的列表,键值对的格式是元组数据dict1 = {"name":"Tom","age":11} dict1.items()

4.5 注意事项

字典中的键是唯一的。在python3.5及以前,字典是无序的。在 Python3.6 版本中, dict 字典已经经过优化, 变为有序字典. 并且字典所占用的内存占用减少了20%到25%。

4.6 字典的作用


5. 格式转换

转换成列表转换成元组转换成集合
列表listtuple(列表对象)set(列表对象)
元组tuplelist(元组对象)set(元组对象)
集合setlist(集合对象)tuple(集合对象)

6. for循环

6.1 for循环作用


使用格式:for变量名 in 列表:

list1 = [1, 2, 3, 'Tom']
for data in list1:  
    print(data, end=' ')  
    # 输出:1 2 3 Tom 

7. Range

7.1 range的功能

创建连续的整数。

7.2 range的基本语法

格式1:range(m) 生成 0 到 m-1 的整数

格式2:range(m,n) 生成 m 到 n-1 的整数

格式3:range(m,n,s) 生成 m 到 n-1 的整数,整数间隔为s

r1 = range(1,5)     # 由1到5,不包含5
print(list(r1))r2 = range(1,10,2)  # 由1到10,不包含10,每次自增2
print(list(r2))

7.3 range的应用场景

1.配合for循环构造指定次数的循环。

for _ in range(..):​   
    循环执行的代码​

2.快速创建由连续的整数作为数据的列表、元组、集合对象。

list(range(..))
tuple(range(..))
set(range(..))​

8. 数据存储结构嵌套

8.1 数据存储结构嵌套概念

数据结构嵌套指一种数据结构中包含的数据是另一种数据结构。

8.2 范例

list1 = [1,2,3]
list2 = [4,5,6,7]
list3 = ["Joe","Sam"]
tuple1 = (5,4,3)
set1 = {8,7,6}
list4 = [list1,list2,list3,tuple1,set1]
print(list4)​
# 输出 [[1, 2, 3], [4, 5, 6, 7], ['Joe', 'Sam'], (5, 4, 3), {8, 6, 7}]

9. 公共方法

方法名功能参数返回值范例
len(model)关键词:数据总量获取容器模型中的数据总量model:保存有数据的存储模型,该模型接受各种容器容器模型中数据的总量list1 = [1,2,3,'Tom',"valley"] length = len(list1)
max(model)关键词:最大值获取容器模型中的最大值,对于字典获取字典的键key的最大值model:保存有数据的存储模型,该模型接受各种容器容器模型中数据的最大值list1 = [1,2,3,4,5] max_value = max(list1)
min(model)关键词:最小值获取容器模型中的最小值,对于字典获取字典的键key的最小值model:保存有数据的存储模型,该模型接受各种容器容器模型中数据的最小值list1 = [1,2,3,4,5] min_value = min(list1)

10. 切片

10.1 切片的作用

获取列表、元组或字符串中的局部数据。

10.2 切片基本语法

容器对象[开始索引:结束索引:步长]。

10.3 特殊格式

省略开始索引:默认开始索引为0​
范例:list1[:5:1]  等同于   list1[0:5:1] 
省略结束索引:默认结束索引为数据总量
​范例:list1[0::1]  等同于   list1[0:len(list1):1]​
省略步长:每次递增索引数为1​ 范例:list1[0:5:]  等同于   list1[0:5:1]  ​
负数步长:   反向操作/反向步长操作,需要开始索引、结束索引逆序输入​
范例:list1[5:0:-1]     
常见格式:​范例:list1[:5:]  获取索引5之前的数据(不含5) 
范例:list1[4::]   获取索引4之后的数据(含4)​


11. 通用运算符

运算符功能格式适用范围
+将两个容器数据合并放入第一个容器list1 + list2列表之间或元组之间(列表与元组之间报错)
*将容器数据复制n次放入容器中list1 * n列表、元组
in判断容器中是否包含数据data in list1列表、元组、集合、字典(字典判断数据是否在keys()中)
not in判断容器中是否不包含数据data not in list1列表、元组、集合、字典(字典判断数据是否不在keys()中)
>、>=、==、<=、<比较两个容器中的数据关系list1 <= list2列表、元组、集合


12. for…else

12.1for…else基本语法

for 变量名 in 列表:

变量相关操作

else:

循环正常运行结束后执行的操作

for data in range(5):
    print(data,end=' ')
else:
    print('结束')​
 # 输出: 0 1 2 3 4 结束

如果中间遇见break语句,循环未执行完毕,不会走else里面的代码片段。

12.2 注意事项

1.如果for循环中执行了break语句,则else中的代码将不执行。

2.while循环同样具有while…else语法格式。

13. 推导式

13.1 推导式基本语法

基础语法格式:循环变量 for循环

list1 = [data for data in range(5)]

数据处理语法格式:表达式 for循环

list1 = [data*5 for data in range(5)]

数据过滤语法格式: 表达式 for循环 if判断

list1 = [data for data in range(5) if data > 200]       

13.2 推导式的作用

推导式可以快速生成数据存储结构中的数据。

# 创建包含1到100所有整数的列表
list1 = [data for data in range(1,101)]
# 创建包含1到10的平方和的列表
list2 = [data**2 for data in range(1,11)]

推导式的局限,不能打印复杂的循环结构数据。