Day8:元组、集合、不可变集合
编辑日期: 2024-11-28 文章阅读: 次
Day8:元组、集合、不可变集合
python还有一些其他类型的数据容器,它们各有特点。今天,我们学习另外三种数据容器,尽管它们的使用频率不高,但在特定情况下用途也很大。 为了跟上今天的学习进度,请在“Week_06”笔记本最下面添加一个markdown单元格,并写上“元组、集合、不可变集合”。
什么是元组
元组就像是不可变列表,即不可以增加、删除、修改元素。
利用元组的这个特性,你便可以把一些不想被修改的数据存储为元组的形式。元组也可以像列表那样,通过索引值对其进行迭代。
新建元组
在元组中,元素与元素之间以,
(英文逗号)分隔。新建元组的方法与新建列表的方法一致,只不过列表以[]
表示,而元组以()
表示(注:也可以不加()
,但为了增加代码可读性,建议加上()
)。
让我们看一下示例代码:
t1 = ("hello", 2, "hello") # 有括号
t2 = True, 1 # 无括号
print( type(t1), type(t2) ) # t1和t2都是元组
t1[0] = 1 # 因为元组不可变,所以这行代码会导致程序崩溃
运行上段代码,你可以看到,我们输出了变量t1
和t2
的类型,它们都输出了元组。
如前所述,新建元组时可以有括号,也可以没有括号。
最后一行代码将导致程序崩溃,因为元组建立后,其内的元素不能更改。
想要改写元组内的数据,唯一方法是再建一个新元组。
什么是集合?
集合具有列表和字典的一些特征。
同列表一样,集合信息集合;但是,又同字典中的键一样,集合只能包含唯一的值。
集合内的元素也是无序的,所以不能通过索引访问集合内的元素,而是通过值本身访问它们(就像访问字典中的键一样)。
此外,集合也是一种可遍历的数据类型。使用集合储存无重复值的数据是一种很使用的方法。
新建集合
可通过两种方式来新建集合。
- 第一种方法是使用关键字
set()
,后面跟一个中括号,即[]
。 - 第二种方法更实用,就像使用大括号创建字典一样简单。我们来看看:
s1 = set( [1, 2, 3, 1] ) # 使用关键词set()和中括号[]
s2 = {4, 4, 5} # 使用大括号,就像字典一样
print( type(s1), type(s2) )
s1.add(5) # 使用add方法,向集合s1中添加新元素
s1.remove(1) # 使用remove方法,把1从集合中去除
print(s1) # 注意s1打印结果中,位于最后的那个1被弃去了
运行上段代码。在结果中,首先给出了两个变量的数据类型——集合。当我们输出s1变量的值时,它只输出了“1,2,3"。这是因为集合内部元素是不可重复的,因此它会删除第二个“1”值。集合允许我们添加、删除和更改其中的信息,如上段代码所示。
什么是不可变集合?
不可变集合本质上是集合与元组的结合。
不可变集合是不可变的、无序的、且内部元素是唯一的。
使用不可变集合储存银行账号之类的敏感信息,将是完美的选择,因为你不会想要修改这些信息。不可变集合是可迭代对象,但不能通过索引获取值。
新建不可变集合
新建不可变集合时,需要用到关键词frozenset
,后面跟个小括号,小括号内是中括号。
这是创建不可变集合的唯一方式,让我们看看下面这段代码:
fset = frozenset( [1, 2, 3, 4] )
print( type(fset) )
运行上端代码,并查看结果。
在本书中,我们不会过多地使用不可变集合。但是在Python中,前文中所讲的数据容器都有其特定用途。
数据容器的对比
数据容器 | 有序 | 可迭代 | 元素唯一性 | 不可变 | 可变 |
---|---|---|---|---|---|
列表 | 是 | 是 | 否 | 否 | 是 |
字典 | 否 | 是 | “键”具有唯一性 | “键”不可改变 | “值”可改变 |
元组 | 是 | 是 | 否 | 是 | 否 |
集合 | 否 | 是 | 是 | 否 | 是 |
不可变集合 | 否 | 是 | 是 | 是 | 否 |
今日练习
- 用户输入: 让用户输入任意数量的银行卡号,然后将这些银行卡号存储到列表中。 当用户输入完成后,将这个列表转换为不可变集合,并打印出该集合。
- 转换: 将下面这个列表转换为一个没有重复数字的集合,打印出这个集合,并检查是否存在重复数值。
>>> nums = [3, 4, 3, 7, 10]
今日小结
今天,我们学习了三种数据容器,尽管我们大部分时间都在使用字典和列表,但每一个数据容器都有其独特用途。