组合数据类型有三种方式:集合类型、序列类型和字典类型。而同时,序列类型又包括元组类型和列表类型。
下面,我们分每一种方式来介绍它们的用法:
集合类型与数学里面的集合定义相似,可以容纳多个数,由逗号分隔,并且是没有顺序的,但他们必须是独一无二且不可被改变的。
如果我们要建立一个集合,我们可以用大括号或者set()方法。
需要注意的是,如果我们要建立一个空集合,那么我们只能用set()方法。
原因:用大括号直接创建的空类型是一个字典,而不是集合。
下面我们举个例子:
A = {"python","123",("python",123)}
这样我们就生成了一个具有三个元素的一个集合。
同样的,我们可以用set()方法来创建:
A = set("pppyyyttt123")
创建之后,A集合将是(“p”,“y”,“t”,“1”,“2”,“3”)。
即:多余的元素是会被集合剔除的。
集合类型有六个基本操作符,和数学类似,操作符如图中所示:
除此之外,还有
S <= T或S < T //用于判断S和T的子集关系,返回TRUE,FALSE,下同
S >= T或S > T
除了基本操作符之外,python还提供了增强操作符:
请注意,增强操作符并不会创造一个新的集合,而是直接改变、更新了原集合。
相反,基本操作符的运算结果会创造一个新的集合来作为运算结果。
下面我们举一个例子:
A = set("pppyyy123")
B = {'p','y',123)
print(A-B)
经过上面的运算,我们最终将得到以下结果:
{'1','2','3'}
这就是集合的运算。
对于给定的一个列表,我们可以使用集合非常重要的一个特性:“元素不能重复”来进行数据去重。
现在我们给出实例如下:
lt = ['p','p','p','y','y','y','123']
A = set(lt)
lt = list(A)
print(lt)
经过上面这一段代码,我们最终得到的lt如下:
['123', 'y', 'p']
即我们通过集合的操作对一个列表实现了数据去重。
与集合类型不同,序列是具有先后关系的一组元素。它类似于数学中的数列:S0,S1,```Sn.
序列类型由序号引导,因此可以通过下标访问序列的特定元素。
相应的,我们可以知道,字符串类型、元组类型、列表类型都是序列类型的扩展。所以相应的,序列类型在通过下标访问时也可以通过负数下标来从最末端开始访问。
同样的,序列类型也有6个基本操作符:
通过这6个操作符,我们可以对序列进行一部分的操作。下面我们给出一个示例:
lt = [ 1, 2, 3, '6']
print(lt[1])
print(lt * 5)
运行上面这一段代码,我们得到以下结果:
2
[1, 2, 3, '6', 1, 2, 3, '6', 1, 2, 3, '6', 1, 2, 3, '6', 1, 2, 3, '6']
同样的,由于我们知道序列类型是有方向的,所以我们可以对他们进行取反操作。那怎样进行取反呢?我们就可以用上面的一些列操作来完成。下面我们给出示例:
lt = [ 1, 2, 3, '6']
print(lt[::-1])
运行上面这一段代码,我们得到以下结果:
['6', 3, 2, 1]
很明显,我们对他做了取反操作。原理是什么呢?我们让python输出列表,前面冒号表示从头取到尾,而最后一个-1表示步长为-1,意思就是按反方向操作。
如上图所示,python提供了一些列的序列类型的函数和方法。
需要注意的是,如果max()方法和min()方法中,如果序列中的元素是不可比较的,那么这两个函数将会报错。
元祖类型是序列的一种扩展,但是,不同的是,元组一旦被创建就不能被修改。
元组类型可以使用两种方式创建:
**使用()和tuple()创建。**每个元素之间用逗号分隔,在表示元组的时候,可以使用小括号,也可以不使用小括号。什么意思?我们以一个实例来说明。
def func():
return 1,2
在返回数据的时候,python编译器不会认为你返回了1和2两个值,而是认为你返回了(1,2)这样一个元组类型。
creature = "animal", "people", "cat", "dog"
print(creature)
经过运行上面这段代码,我们可以得到以下结果:
('animal', 'people', 'cat', 'dog')
说明,上面代码中的creature已经成为了一个元祖类型。
元组类型继承了序列类型的所有操作,但同时,由于元祖类型被创建后就不能被修改,因此元组没有特殊的函数和方法。
所以,假如我们运行下面这一段代码:
creature = "animal", "people", "cat", "dog"
print(creature[::-1])
运行上面这一段代码,我们将得到以下结果:
('dog', 'cat', 'people', 'animal')
我们将元组以相反的顺序输出了出来,但是这并不代表我们更改了元组creature的值:
我们只是得到了一个新的元组。元组是不可被修改的。
列表也是一种序列类型,但不同的是,它被创建后可以随意地被修改。
列表没有长度限制,而且各个元素之间也可以不同。
创建列表也有两种方式:通过方括号[]或者list()方法来创建。
元素之间也是用逗号,分隔。
此处需要注意的是:如果我们没有通过方括号[]和list()方法来创建一个列表,而是通过赋值的方法来得到了一个列表,那么我们并没有创建一个新列表,而是将原有的列表赋给了不同的名字。(涉及到指针和内存操作)
我们举个例子:
lt = [1,2,3,4,5]
lt2 = lt
lt2[1] = 5
print(lt)
运行上面这一段代码,我们得到了以下结果:
[1, 5, 3, 4, 5]
即:我们是修改了原有列表,而不是创建了新的列表来进行操作。
由于列表的灵活性,列表拥有自己独特的操作函数和方法。如下图所示:
而且需要注意是,我们对列表的操作函数和方法都会作用到列表本身,因此没有产生新的列表。我们举一个小例子:
lt = [1,2,3,"hello"]
lt[1:2] = "yeah"
print(lt)
运行上面这一段代码,得到以下结果:
[1, 'y', 'e', 'a', 'h', 3, 'hello']
即我们对下标为1的数字2,修改成了新的这几个字符。
列表还有几个函数和方法,如下图:
其中,需要注意的是,insert()方法是在指定位置的后面加上一个元素,而不是在前面。
字典就相当于数学中的映射,是键值对的集合,键值对和键值对之间是无序的。
字典可以用大括号{}或者函数dic()创建。
如下所示,我们可以用一个空的{}来创建一个新的字典。
dic = {}
print(type(dic))
经过运行这一段代码,我们可以得到以下内容:
说明我们得到的是一个在字典类型,而不是一个集合类型。
即:用大括号直接创建的类型是一个字典类型。
同样的,字典类型也有自己特有的操作函数和方法,如下图所示:
需要注意的是, k in d这个方法是判断键是否在字典里面,而不是值是否在字典里面。
对于d.keys()方法和d.values()方法,我们下面举一个例子:
dic = {"中国":"china","美国":"America","英国":"England","日本":"Japan"}
print(dic.values())
print(type(dic.values()))
运行上面这一段代码,我们可以得到以下内容:
dict_values(['china', 'America', 'England', 'Japan'])
我们可以看到,我们得到的结果类型是dict_values类型,而不是可以直接修改的列表类型,但是可以用来做遍历操作。
同样的,字典还有下面的一些操作:
请注意,d.get()方法和d.pop()方法都是有两个参数的,这意味着我们可以用第二个参数来判断字典中是否存在这样一个值。
还需要注意的是,d.pop()方法是取出某个值,取出后字典中将会丢失这个键值对。
好了,以上就是对于三种组合数据类型:集合、序列、字典的所有基本知识了。