一、对四个关键数据结构的认识
数据结构是我们学习编程语言遇到的第一个非常重要的课题。在实际编写代码时,处理单个数据、字符的加减乘除还是与或非操作,想必都是很简单的。但是在处理一组数据、字符的操作时,往往就很复杂。比如C语言,对语法的强制要求,我们在进行数组的操作时,需要考虑数据格式/类型、元素数量、是否可以动态变更、如何有效实现查找等。python就很好的解决了这些比较头疼的问题,这是感觉比较厉害的地方。之前我也用过matlab,python很类似,但是python又比matlab的系统兼容性和功能多样性上有明显的提升。因此,对于python内部定义的四个重要数据结构,最好吃透,多联系,益处很多。
二、具体应用解析
(一)列表
系统中,用中括号来识别列表。中括号很有意思,小括号说明已经不能再变动了,大括号说明还要装东西,中括号则可大可小,可以变成的形式很多,应用范围也最广,直接用下面的代码可以很清晰的展示出来:
import sys
#list内元素的数据类型可以不同,也可以是另外一个list,各种类型都可以加进去
list1 = ['frui','male',100,'python',[2019,2018,2020],'cc']
list2 = ['']
print(list1) #print语句很强大,可以直接输出列表所有信息
#通过索引的形式来访问列表中的具体值,冒号代表一段区间
print (list1[:])#两头没写说明是全部区间,同list1
print (list1[0],list1[2]) #索引是从0开始的
print (list1[-1],list1[-3]) #索引可以倒着来,最后一个是-1
print (list1[0:3]) #这个表示从0开始,需要3个元素
print (list1[:3]) #这个与上个结果是一样的
print (list1[-3:]) #从倒数第3个元素开始打印,直到最后
list1.append("linux") #在列表末尾追加元素
list1.insert(1,"linux") #直接把元素插入的指定位置
list1[0] = "jay" #(改)直接替换某个位置元素
#delete
list1.pop() #删除list末尾的元素
list1.pop(1) #删除指定位置的元素
del list1[0]
list1.remove("python") #移除指定字符串
print (list1)
print (list1.index(100)) #查找已知元素的索引
print (list1[list1.index(100)])
print (list1.count(100)) #打印某元素在列表中的数量
list1.clear() #清除整个列表
list1.reverse() #反转整个列表
list1.sort() #排序 按ASCII码顺序排序,若元素中有list类型,则无法排序,为什么?
list2 = [1,2,3,4]
list1.extend(list2) #列表合并
print (list1)
del list2 #删除整个变量
显示的结果:
[‘frui’, ‘male’, 100, ‘python’, [2019, 2018, 2020], ‘cc’]
[‘frui’, ‘male’, 100, ‘python’, [2019, 2018, 2020], ‘cc’]
frui 100
cc python
[‘frui’, ‘male’, 100]
[‘frui’, ‘male’, 100]
[‘python’, [2019, 2018, 2020], ‘cc’]
[‘male’, 100, [2019, 2018, 2020], ‘cc’]
1
100
1
[1, 2, 3, 4]
(二)元组
系统中,元组就是一个不可变更的固定数组。我们可以对数组内的元素进行计算,提取,但不能更改,删除。相当于C语言的const常量数组。测试代码:
import sys
tp1 = (1,2,3,4,3)
tp2 = ('frui', 27)
tp3 = "a", "b", "c", "d";
tp4 = () #创建空元组
print(tp1.count(3))
print(tp2)
print(tp3[1])
print(tp4)
相应的结果是:
2
(‘frui’, 27)
b
()
没有append\remove等等代码,比较简单,学会了list,这个很快就会了。
(三)字典
很形象的一个功能。我们查字典最重要的是要有目录标签,然后查找内容,python的字典类似,在每一个内容前,多加一个标签(我们也可以理解为自定义索引),看看示例吧:
import sys
Userinfo = {
'st1':"Tian zzh",
'st2':"Li JM",
'st3':"ZHU xn",
'st4':"Lu DY",
}
print (Userinfo)
print(Userinfo['st2']) #显示st2的具体值
Userinfo['st3']="Deng YP" #修改值
Userinfo['st1']="Deng YP"
print(Userinfo['st3']) #显示st3的具体值
Userinfo[3]="Lin LG"#添加值,这里3不是单纯的数字,系统会识别为一个标签
print(Userinfo[3]) #显示st3的具体值
Userinfo.pop('st4') #删除了'st4'的标签和信息,这是一对
print (len(Userinfo))#显示userinfo的内容个数
print(Userinfo)
结果:
{‘st1’: ‘Tian zzh’, ‘st2’: ‘Li JM’, ‘st3’: ‘ZHU xn’, ‘st4’: ‘Lu DY’}
Li JM
Deng YP
Lin LG
4
{‘st1’: ‘Deng YP’, ‘st2’: ‘Li JM’, ‘st3’: ‘Deng YP’, 3: ‘Lin LG’}
(四)集合
集合是个数学概念,我们上学时涉及到的集合和系统的集合意思基本一样,它是一个没有排序的、不重复的数组。它也用大括号来表示,与字典不同的是,集合没有冒号,只有逗号。这是区别集合和字典的关键。看看示例:
import sys
basket1 = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket2= {'apple', 'egg', 'apple', 'meet', 'orange', 'banana'}
print(basket1)
print(basket1.intersection(basket2)) #求两个集合的交集
print(basket1.difference(basket2))#显示集合basket1有但basket2没有的,也叫差集
print(basket1.union(basket2))#求并集
结果:
{‘apple’, ‘banana’, ‘pear’, ‘orange’}
{‘apple’, ‘banana’, ‘orange’}
{‘pear’}
{‘apple’, ‘orange’, ‘meet’, ‘pear’, ‘banana’, ‘egg’}
三、几点思考
(一)总的来看,我觉得列表和元组是我们常见的,字典和集合科研工作可能用的会多一些,日常生活中并不一定都会用到。当然根据个人实际使用喜好来。
(二)使用pycharm软件,这些结构的大部分功能都能找到,关键是如何得心应手的使用很关键,勤加练习才是王道。