上次课我们学习了Python的前三种数据类型,还没有学习的同学们可以参考:
探索Python融合地学:斗之气八段(数字、字符串、元组)-CSDN博客
今天继续来看另外三种数据类型,一起来学习列表、字典和集合。
一、列表数据
列表(List),是一类用来存储混合可变数据的数据类型,与元组不同,列表具有较大的灵活性,允许原来的列表元素和结构发生改变。
(1)创建列表
#创建列表
l1 = [] #创建一个空列表
l2 = [1,2,3,4] #创建一个数字列表
l3 = [1,'hello','好'] #创建一个混合列表
l4 = [[1,2,3],['how','are','you'],["禾穗新芽","三年备忘录","薛尖尖"]]#创建一个二维列表
print("二维列表:",l4)
-------------------------------------
#结果
二维列表: [[1, 2, 3], ['how', 'are', 'you'], ['禾穗新芽', '三年备忘录', '薛尖尖']]
使用[ ]符号可以直接创建列表,需要注意的是,列表数据是支持嵌套的,这代表了不同的维度,这在存储一些地理时空数据上运用广泛,一般的地理数据包含空间维度和时间维度,因此我们可以根据该特点,采用列表的方式存储。
(2)基本操作命令
列表相较于其他的数据类型,支持元素的添加,删除和更换,一起来学习它基本的操作命令吧。
#列表数据常用的操作命令
L1 = [1,1,2,3,4,5]
L1.append(6) #直接在列表末尾加上元素,使用append
print("末尾加上新元素:",L1)
L1.insert(1,8) #在下标位置为1的地方插入8,使用insert
print("在特定位置加上元素:",L1)
L1.remove(5) #删除列表元素5,使用remove
print("删除某个元素:",L1)
print("弹出特定位置的元素:",L1.pop(2)) #弹出下标为2的位置的元素,使用pop
print("此时列表为:",L1)
print("返回某个元素的下标:",L1.index(1)) #返回1这个元素的第一次出现的索引下标值,使用index
print("统计元素x出现的次数:",L1.count(1)) #统计1这个元素列表中的出现次数,使用count
L1.sort() #原地排序,使用sort
print("原地排序:",L1)
L1.reverse() #反向排序,使用reverse
print("反向排序:",L1)
L1.clear() #清空列表,使用clear
print("清空列表:",L1)
-------------------------------------
#结果
末尾加上新元素: [1, 1, 2, 3, 4, 5, 6]
在特定位置加上元素: [1, 8, 1, 2, 3, 4, 5, 6]
删除某个元素: [1, 8, 1, 2, 3, 4, 6]
弹出特定位置的元素: 1
此时列表为: [1, 8, 2, 3, 4, 6]
返回某个元素的下标: 0
统计元素x出现的次数: 1
原地排序: [1, 2, 3, 4, 6, 8]
反向排序: [8, 6, 4, 3, 2, 1]
清空列表: []
这里大家可以仔细对比每一步操作之后,列表内部的元素发生的变化,基本上对原列表进行操作之后,列表会发生改变,以下给个写代码的错误案例:
L2 = [1,2,3,4]
#错误示范
L3 = L2.append(5)
print("新列表:",L3) #你猜猜结果是什么?
#正确输出
print("新列表:",L2) #你猜猜结果是什么?
------------------------------
#结果
新列表: None
新列表: [1, 2, 3, 4, 5]
上面的案例提示我们,我们的每一步操作都是对原列表进行操作,不能够将结果赋值给新列表存储,如案例中的L3,输出结果是None,而如果输出的是L2,会发现列表已经通过append方法将5这个元素添加到原来的列表中了。
(3)列表嵌套
列表嵌套就是将不同列表存储在一个大型列表中,使之构成该列表的一个维度,这里我们举个例子子类说明,假设你有地理时空数据,如何嵌套成一个大列表,使之形成一个数据集,并且应该怎么访问?。
list1 = [20.5,21,21.5,22] #纬度数据
list2 = [120.5,121,121.5,122] #经度数据
list3 = ["2025-06-16","2025-06-17"] #时间数据
L = [list1,list2,list3]
print("嵌套结果:",L)
print("纬度访问:",L[0])
print("时间维度的第二个数据:",L[2][1]) #时间维度的子列表下标是2,时间维度里头的第二个元素下标为1
-----------------------------------
#结果
嵌套结果: [[20.5, 21, 21.5, 22], [120.5, 121, 121.5, 122], ['2025-06-16', '2025-06-17']]
纬度访问: [20.5, 21, 21.5, 22]
时间维度的第二个数据: 2025-06-17
二、字典类型
字典类型(dictionary),是反映关键字(key)和值(value)对应关系的数据类型,在地理空间数据中,有许多的属性信息可以采用字典类型进行存储,一般使用{key:value,key:value,....}的形式定义字典类型。
(1)字典的常见命令
我们以最近爆火的电视剧《长安的荔枝》为例,看看字典怎么样存储信息。
#创建简单字典
identification_dict = {"姓名":"李善德","官职":"荔枝使","弟弟":"郑平安"}
print("字典:",identification_dict)
print("获取姓名:",identification_dict["姓名"])
print("获取官职:",identification_dict["官职"])
print("获取所有键:",identification_dict.keys())
print("获取所有值:",identification_dict.values())
#修改或添加字典键-值对信息
identification_dict["官职"] = "上林署小官" #修改官职对应的值信息
identification_dict["主演"] = "雷佳音" #添加新的信息
print("新字典“:",identification_dict)
#删除信息
del identification_dict["弟弟"] #使用del方法删除键值对
print("现在的字典:",identification_dict)
identification_dict.pop("官职") #使用pop方法删除键值对
print("现在的字典:",identification_dict)
#清空字典
identification_dict.clear()
print("现在的字典:",identification_dict)
-------------------------------------------------------------
#结果
字典: {'姓名': '李善德', '官职': '荔枝使', '弟弟': '郑平安'}
获取姓名: 李善德
获取官职: 荔枝使
获取所有键: dict_keys(['姓名', '官职', '弟弟'])
获取所有值: dict_values(['李善德', '荔枝使', '郑平安'])
新字典“: {'姓名': '李善德', '官职': '上林署小官', '弟弟': '郑平安', '主演': '雷佳音'}
现在的字典: {'姓名': '李善德', '官职': '上林署小官', '主演': '雷佳音'}
现在的字典: {'姓名': '李善德', '主演': '雷佳音'}
现在的字典: {}
上面的代码展示了如何创建字典并获取、修改、增加以及删除所需的信息,大家可以结合案例自己做一些修改。
(二)地学应用案例
接下来,给大家展示一下,地学领域里面如何应用字典存储信息。
比如,存储土地利用类型时,每一种土地利用类型有自己对应的代码,这实际上就能够映射为键值对关系。
#土地利用类型代码
landuse_dict = {
1: "耕地",
2: "林地",
3: "草地",
4: "水体",
5: "建设用地",
6: "未利用地"
}
category_name = landuse_dict[2] # 输出:"林地"
print("地类:",category_name)
--------------------------------
#结果
地类: 林地
再例如,城市与坐标对之间的关系,我们也可以使用字典类型来进行存储。
city_coords = {
"Beijing": (39.9042, 116.4074),
"Shanghai": (31.2304, 121.4737),
"Guangzhou": (23.1291, 113.2644)
}
print(city_coords["Shanghai"])
-------------------------------
#结果
(31.2304, 121.4737)
在GIS空间分析的过程中,也存在属性信息的映射,同样可以采用字典来存储,大家可以自己多尝试看看,来深入理解。
三、集合类型
集合类型(set),是一种用来存储大型数据结构的类型,具有元素存储不可重复原则。集合内的数据既可以是常规的数字,也可以是字符串,且能实现自动去重。
(1)创建集合
创建集合有多种方式,既可以使用{ }直接创建,也可以使用set命令进行,我们一起来看看。
s1 = {1,"薛尖尖","hello"}
print("集合:",s1)
s2 = {1,1,2,"薛尖尖","hello","hello"} #自动去重
print("集合:",s2)
s3 = set([1,3,"薛尖尖","hello"]) #使用set创建
print("集合:",s3)
s4 = set() #创建空集合必须使用set(),不能使用{ }
----------------------------------
#结果
集合: {1, 'hello', '薛尖尖'}
集合: {1, 2, 'hello', '薛尖尖'}
集合: {'hello', 1, 3, '薛尖尖'}
特别关注,创建空集合必须使用set(),不能使用{ }。
(2)常用操作命令
和其他数据类型一样,一些常用的操作命令我们需要掌握。
S1 = {1,2,3,4,5}
S1.add(6) #添加元素
print("S1:",S1)
S1.remove(7) #删除元素,不存在会报错
print("S1:",S1)
S1.discard(2) #删除元素,不存在也不会报错
print("S1:",S1)
S1.clear() #清空集合
print("S1:",S1)
-------------------------
#结果
S1: {1, 2, 3, 4, 5, 6}
Traceback (most recent call last):
File "F:\Python学习打卡\数据类型.py", line 213, in <module>
S1.remove(7)
~~~~~~~~~^^^
KeyError: 7
S1: {1, 3, 4, 5, 6}
S1: set()
通过上述案例我们发现,在进行元素删除时,我们采用remove会合理一些。
集合同样可以进行数学上的集合运算,我们来看看。
#集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print("交集:",a & b)
print("并集",a | b)
a = {1, 2}
b = {1, 2, 3}
a.issubset(b) #判断a是否为b的子集,使用issubset
b.issuperset(a) #判断b是否为a的超集,使用issuperset
a.isdisjoint({4}) #判断是否没有交集,使用isdisjoint
----------------
#结果
交集: {3, 4}
并集 {1, 2, 3, 4, 5, 6}
True
True
True
(3)地学应用
通过上面的学习我们发现,集合能够判断特定的两个数据集之间的关系,我们可以采用该方式来实现空间数据分类统计、去掉一个数据集中的重复属性信息,统计唯一类别等。
比如,有时我们获取了很多的很多的地类斑块信息,这些地类存储在列表中,有很多重复的土地利用类型信息,这个时候我们需要知道该地区到底有哪几种土地利用类型,集合就派上用场了。
land_use = ["林地", "耕地", "水体", "耕地", "林地"]
unique_types = set(land_use)
print("该市土地利用类型有:",unique_types)
------------------------------------------
#结果
该市土地利用类型有: {'耕地', '水体', '林地'}
当然,这个是一个非常简单的应用,不过复杂的案例都是从简单的应用开始,大家加油。
到这里,Python常见的数据类型我们就一起学习完了,大家赶紧复习一下吧!!
好了,今天的笔记分享就到这里,更多内容欢迎大家继续关注我们,如果对你的学习有帮助,不要忘记了点赞、转发、支持和关注哦!