- Python集合(collection)
- 一、元组
- 二、列表
- 三、字典
- 四、集(set)
- 五、内置函数
python的标准集合类型可以保存对象引用,因此实际上它们可以保存任何类型对象的集合。内置的一些集合类型有tuple(元组)、list(列表)
和字典(dictionary)、set(集)。除了元组之外,其他都是可变的,因此可以对列表、字典和集中的元素进行添加和删除。在collection模块中,还额外提供一些可变的集合类型(大家可以自行了解)。
元组是一个由零个或者多个对象引用所组成的有序序列。元组入字符串一样,也支持len()这样的序列函数,或者从元组中提取元素。但是元组是不可变的,因此不能替换或者删除元组中的任何一个元素。那如果想要对于原先已有的元组进行修改,将其转换成列表进行修改即可。
empty = ()
print(type(empty))
one = ("Candy")
print(type(one))
two = ("Candy",)
print(type(two))
输出:
索引与切片:
name = ('Tom','Jack','Bob','Brenda','Jerry')
print(len(name))
print(name[1])
print(name[:3])
输出结果:
5
Jack
('Tom', 'Jack', 'Bob')
pets = (('dog',1),('cat',2),('deer',3))
print(pets)
print(pets[2][1])
print(pets[1])
输出:
(('dog', 1), ('cat', 2), ('deer', 3))
3
('cat', 2)
任何序列都可以通过传递给元组的构造函数,从而创建一个元组。
a = tuple('some text')
print(a)
输出:
('s', 'o', 'm', 'e', ' ', 't', 'e', 'x', 't')
二、列表
list(列表)类型是一个月元组tuple类似的有序序列。在之前的字符串与元组中所用到的全部序列函数和切片操作,对列表也完全有效。列表与元组所不同的地方在于,列表是可变的,可以进行增删改查。
#建立空列表 ls_1 = [] ls_2 = list()
切片示例:
fruit = ['apple','orange','banana','haw','cherry'] print(fruit[-1]) print(fruit[:2]) print(fruit[2:5])
输出结果: cherry ['apple', 'orange'] ['banana', 'haw', 'cherry']
插入或者删除列表元素;
fruit = ['apple','orange','banana','haw','cherry']
print(fruit)
fruit.insert(4,'Rowan')
print(fruit)
del fruit[4]
print(fruit)
fruit.remove('apple')
print(fruit)
del可以移除一个特定索引位置的元素,而remove()方法则用来移除某个元素。
输出: ['apple', 'orange', 'banana', 'haw', 'cherry'] ['apple', 'orange', 'banana', 'haw', 'Rowan', 'cherry'] ['apple', 'orange', 'banana', 'haw', 'cherry'] ['orange', 'banana', 'haw', 'cherry']
用切片同样可以来完成操作;
fruit = ['apple','orange','banana','haw','cherry'] print(fruit) fruit[4:4] = ['Rowan'] print(fruit) fruit[4:5] = [] print(fruit)
输出: ['apple', 'orange', 'banana', 'haw', 'cherry'] ['apple', 'orange', 'banana', 'haw', 'Rowan', 'cherry'] ['apple', 'orange', 'banana', 'haw', 'cherry']
浅复制和深复制;
python中对象质之间是按引用传递的,如果需要复制对象,可以使用标准库中的copy模块。(这个问题在实际应用过程中,很少遇到)
- copy.copy是浅复制,只会复制父对象,而不会复制对象内部的子对象;
- copy.deepcopy是深复制,会复制对象及其子对象。
列表的部分放大和函数;
| 语法 | 说明 |
|---|---|
| x in L | 如果元素x在list L 中,返回 True |
| x not in L | 如果元素x不在list L中,返回 True |
| L + m | 返回一个含有list L和列表m全部元素的列表;extend()方法可以完成同样的事情,且效率更高 |
| len(L) | 返回list L 的长度 |
| L.count(x) | 返回列表 L 中元素x出现的次数 |
| L.index(x) | 返回list L中元素x出现处最左侧的位置索引 |
| L.append(x) | 把元素x追加到列表的末尾处 |
| L.extend(m) | 把列表m的元素追加到list L的末尾处 |
| L.insert(i , x) | 把元素x插入到list L中索引值为i的地方 |
| L.remove(x) | 从列表L中移除最左侧出现的元素x,或者在没找到x的时候,抛出ValueError异常 |
| L.pop() | 返回并从列表L中移除最右侧的元素 |
| L.pop(i) | 返回并从列表L中移除位置索引为i的元素 |
| L.reverse() | 依次逆序排列列表L中的各元素 |
| L.sort() | 依次排序列表L中的各元素;这个方法可以带一些可选参数,比如函数或者带一个便于DSU排序的键值(key) |
字典dict类型是一个数据字典,也称为关联数组。字典可以保存无序的键-值(key-value pair)对集,并可提供快速的键查询功能。键(key)是唯一的,并且必须是不可变的数据类型,如python字符串、数字或者元组;值(value)可以是包括集合类型在内的任何类型,因此可以创建出任意的嵌套数据结构。
dic = dict()
dic_insects = {}
print(type(dic_insects))
insects = {'dragonfly':5000,'praying mantis':2000,'fly':120000,'beetle':350000}
print(insects)
insects['grasshopper'] = 20000
print(insects)
输出:{'dragonfly': 5000, 'praying mantis': 2000, 'fly': 120000, 'beetle': 350000} {'dragonfly': 5000, 'praying mantis': 2000, 'fly': 120000, 'beetle': 350000, 'grasshopper': 20000}
删除的方法和列表中删除元素的方法相同;
del insects["fly"]
insects.pop('dragonfly')
使用构造函数dict()可以创建字典;
dic = dict(A=100,B=200,C=300) print(dic)
输出:
{'A': 100, 'B': 200, 'C': 300}
字典的部分方法与函数:
python提供了两种set集类型:集set 和原封集frozenset。两者都是无序的,但集set是可变的,可以进行添加和删除。原封集frozenset是不可变的,不可以改变其元素。
集set中的每个元素是唯一的;想要在集set中添加一个已经存在了的元素,调用add()函数后不会做任何事。
这里我们创建集set,而不是原封集,原封集自行了解。
unicorns = set(('Narwhal','Oryx','Eland'))
print(unicorns)
print('a' in unicorns)
print('Narwhal' in unicorns)
输出:
{'Narwhal', 'Oryx', 'Eland'}
False
True
unicorns.add('Mutant Goat')
print(unicorns)
unicorns.add('Oryx')
print(unicorns)
unicorns.remove('Narwhal')
print(unicorns)
输出:
{'Mutant Goat', 'Eland', 'Narwhal', 'Oryx'}
{'Mutant Goat', 'Eland', 'Narwhal', 'Oryx'}
{'Mutant Goat', 'Eland', 'Oryx'}
这些集set也支持标准的集运算操作,例如,并集、交集以及差集。
a = set('abcde')
b = set('abchijlk')
print(a - b) # 集合a中包含而集合b中不包含的元素
print(a | b) # 集合a或b中都包含的元素
print(a & b) # 集合a和b中都包含的元素
print(a ^ b) # 不同时包含于a和b的元素
集set的部分方法和函数;
与序列相关的部分内置函数和运算符;



