跳转至

Day8

本文总阅读量次 ,原创教程,严禁转载

Day8:元组、集合、不可变集合

python还有一些其他类型的数据容器,它们各有特点。今天,我们学习另外三种数据容器,尽管它们的使用频率不高,但在特定情况下用途也很大。

为了跟上今天的学习进度,请在“Week_06”笔记本最下面添加一个markdown单元格,并写上“元组、集合、不可变集合”。

什么是元组

元组就像是不可变列表,即不可以增加、删除、修改元素。

利用元组的这个特性,你便可以把一些不想被修改的数据存储为元组的形式。元组也可以像列表那样,通过索引值对其进行迭代。

新建元组

在元组中,元素与元素之间以,英文逗号)分隔。新建元组的方法与新建列表的方法一致,只不过列表以[]表示,而元组以()表示(注:也可以不加(),但为了增加代码可读性,建议加上())。

让我们看一下示例代码:

# 新建元组
t1 = ("hello", 2, "hello")    # 有括号
t2 = True, 1                  # 无括号
print( type(t1), type(t2) )     # t1和t2都是元组
t1[0] = 1     # 因为元组不可变,所以这行代码会导致程序崩溃

运行上段代码,你可以看到,我们输出了变量t1t2的类型,它们都输出了元组。

如前所述,新建元组时可以有括号,也可以没有括号。

最后一行代码将导致程序崩溃,因为元组建立后,其内的元素不能更改。

想要改写元组内的数据,唯一方法是再建一个新元组。

什么是集合?

集合具有列表和字典的一些特征。

同列表一样,集合信息集合;但是,又同字典中的键一样,集合只能包含唯一的值。

集合内的元素也是无序的,所以不能通过索引访问集合内的元素,而是通过值本身访问它们(就像访问字典中的键一样)。

此外,集合也是一种可遍历的数据类型。使用集合储存无重复值的数据是一种很使用的方法。

新建集合

可通过两种方式来新建集合。

  • 第一种方法是使用关键字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中,前文中所讲的数据容器都有其特定用途。

数据容器的对比

表6-1 总结了各数据容器之间的差异

数据容器 有序 可迭代 元素唯一性 不可变 可变
列表
字典 “键”具有唯一性 “键”不可改变 “值”可改变
元组
集合
不可变集合

今日练习

  1. 用户输入: 让用户输入任意数量的银行卡号,然后将这些银行卡号存储到列表中。 当用户输入完成后,将这个列表转换为不可变集合,并打印出该集合。
  2. 转换: 将下面这个列表转换为一个没有重复数字的集合,打印出这个集合,并检查是否存在重复数值。
    >>> nums = [3, 4, 3, 7, 10]

今日小结

今天,我们学习了三种数据容器,尽管我们大部分时间都在使用字典和列表,但每一个数据容器都有其独特用途。

上一篇:Day7还是字典
下一篇:Day9读写文件