python 中的数据结构
1.1 序列
序列时有索引的数组
举例实现:
a=["北京","上海","广州","深圳","重庆","成都"]
print(a[2])
print(a[-1] + " " + a[-2])
print(a[1:3])
# 运行结果
"""
广州
成都 重庆
['上海', '广州']
"""
在序列中可以实现切片功能,切片功能非常重要,后续再Pandas的应用中会重点学习。
b=["北京","上海","广州","深圳","重庆","成都","兰州","乌鲁木齐"]
print(b[0:5:2])
"""
['北京', '广州', '重庆']
"""
上面代码中,0和5分别是序列的启示和终止位置,2时步长,因此出现这种运行结果。
序列也可以相加
序列的 in 应用,用于判断字符串中是否存在序列之中
注:sorted()用于对序列进行排序,list()用于将序列转化为列表,len,min,max,等则分别用于计算序列的长度、最小值、最大值……
1.2 列表
-
列表创建
三种创建的方式,一是手工创建,二是创建空列表之后再添加表元素,三是直接创建一个数据列表。
a=["北京","上海","广州","深圳","重庆","成都"] b=[] c=list(range(0,20,2)) print(a) print(b) print(c)
-
列表元素操作
列表建立之后,主要就是对列表进行增删改,
#用append方式添加列表元素 for i in range(1,10): b.append(i) print("原来的",b) b.insert(2,2.3) print("insert方法之后的:",b) c=[100,200,300] print("extend之后的:") b.extend(c) print(b) b[0]=10000 print("修改过的:",b) del b[-1] print("删除过的:") b.remove(2.3) print(b)
第一个循环以append方式汪列表b中添加数据,再用insert方式往列表中插入数据,insert方式准确的确定插入位置,extend 方法可以实现两个列表的合并,但是只能简单的合并再一块,对重复的数据不会进行处理。
a=[1,2,3] b=[1,2,4] a.extend(b) print('看有重复数据的列表的extend结果:',a)
列表元素的命令
- 删除命令:del(根据列表的索引删除),remove(根据列表的值删除)
- 统计方法:count,index,sum……
-
列表循环语句
一是 for 循环,二是 enumerate 函数
print('for循环的输出:') for item in a: print(item) print('for+enumerate循环的输出:') for index,item in enumerate(a): print(index+1,item)
1.3 元组
元组内容不可改变,并且可以将不同类型的数据放入元组中
元组与列表的操作很类是,唯一区别在于元组再代码中是用圆括号括起来的
a=("北京","上海","广州","深圳","重庆","成都")
b=()
c=tuple(range(0,20,2))
print(a)
print(b)
print(c)
a=("哈哈","嘿嘿","呵呵")
print(a)
1.4 字典
-
字典的典型作用
- 一、去重统计
- 二、提高检索效率
-
创建字典
三种方式创建。
- 手工直接创建
- 通过单列表的方法创建
- 通过两个列表的方式创建
# 手工创建 d={'name':'王猪猪','name1':'李大壮'} if 'name2' in d: print(d['name']) else: print(d['name1'])
# 单列表创建,fromkeys语句 a=["北京","上海","广州"] d1=dict.fromkeys(a) print(d1)
# zip语句痛过两个列表创建 a2=["哈哈","呵呵","嘿嘿"] a3=[1,2,3] d2=dict(zip(a2,a3)) print(d2)
-
字典内容的引用
两种方式引用
- 直接引用
- get方法
#直接引用方式和get引用方式 for i in range(len(a2)): print(a2[i]+" "+str(d2[a2[i]])) print(a2[i] + " " + str(d2.get(a2[i])))
-
字典的增删改查
d2["嘟嘟"]=4 print(d2) d2["哈哈"]=10000 print(d2) del d2["哈哈"] print(d2) print(d2.keys()) print(d2.items()) for x in d2.keys(): print(x) for y in d2.items(): print(y)
-
字典在多分支判断中的应用
from distutils import log def stateA(): print('stateA called') def stateB(): print('stateB called') def stateC(): print('stateC called') def stateDefault(): print('stateDefault called') cases = {'a':stateA, 'b':stateB, 'c':stateC}#定义一个字典 def switch(case): if case in cases: cases[case]() else: stateDefault() def test(): switch('b') switch('c') switch('a') switch('x') test()
先定义四个函数,随后定义一个字典 cases,在随后定义switch 的过程中,可以利用字典的 in 语句获取相应的数据。
1.5 集合
集合是一组元素的组合,其嘴重要的特征是保存不重复元素
- 两种创建方式
- 直接创建
- 用 set() 函数创建
set1={"北京","上海","广州","深圳"}
set2={"北京","重庆","成都","西安"}
a=["北京","三亚","海口","南宁"]
set3=set(a)
print(set1)
print(set2)
print(set3)
-
增删改功能
- 添加:add
- 定点删除:remove
- 弹出方式:pop
set1.add("乌鲁木齐") print(set1) set1.remove("乌鲁木齐") print(set1) print("现在开始进pop了:") print(len(set1)) for i in range(1,len(set1)+1): set1.pop() print(set1)
-
集合运算
交集&,并集|,差集-
set1={"北京","上海","广州","深圳"} set2={"北京","重庆","成都","西安"} print(set1 & set2) print(set1 | set2) print(set1-set2)
-
集合综合案例
import openpyxl from openpyxl.reader.excel import load_workbook import sys import os wk=load_workbook(filename="基金数据.xlsx") sht1=wk["基金1"] sht2=wk["基金2"] a=set() b=set() for i in range(1,sht1.max_row+1): a.add(sht1.cell(i,1).value) for i in range(1,sht2.max_row+1): b.add(sht2.cell(i,1).value) print(a-b) print(b-a)