一、集合:
1.1、什么是集合:
参考集合的数学概念:
集合是一个具有"无序性"、“确定性”、"互异性"的数据总体。
由此我们就可以看出集合的性质:无序、互异,也就是说,在集合中的元素可以类型互不相同,顺序也是无序(在集合中的元素不是数字类型的时候),并且一个集合中不会出现两个相同的元素。这就是集合的特性!
1.2、集合的实例化方式:
第一种方式:以{}(大括号)的方式创建:
比如这个实例:
Set = {'a', 'd', 'e', 'c', 'g'}
print(Set)
看到效果,我们可以发现,这不光是无序,而且每次出现的次数还是随机的:
上面就是两次输出的集合Set内容。
第二种方式:set(list/tuple/set/string)的方式实例化集合:
需要注意的是:如果是初始化空集合,必须用这种方式实例化,目的是避免和字典类型初始化空字典相矛盾。如果一定要使用{}的方式创建集合,那只会创建出空字典,如下:
然后如果用set()的面向对象的构造方式实例化set对象,那么它会把集合种的元素合并成.
实例展示:
Set1 = set({'abc', 'c'})
print(Set1)
Set2 = set(('a', 1, 2))
print((Set2))
Set3 = set(['1', 1, '2', 2])
print((Set3))
执行结果如下:
从代码实验很明显可以看出,这个set()方法啊,其实就可以理解为一种强制类型转换,把其他的类型转换成集合类型,但是还有另外一种常用的:set(string),如下:
s = set("aaabbbcc")
print(s)
结果如下:
1.2、集合之间的运算:关系运算
集合的交:c = a & b
集合的并:c = a | b
集合的差:c = a - b
集合的对称差:c = a ^ b
操作实例如下:
1.3、集合的内置方法:
1.3.1、往集合中添加元素:add()方法与update()方法
s = set()
print(s)
s.add("hello")
print(s)
s.update("world")
print(s)
s.update([1, 2])
print(s)
执行结果如下:
说明:
第一点:
用 {} 的方式创建集合,输出的空集合是字典,而真正的输出空集合应该如上面的那样:set()
第二点:
add()方法是直接把add括号内的对象,作为集合中的一个元素加入集合的;而update()方法则是把update括号内的对象,作为一个集合加入集合的,什么叫作为集合加入集合呢?我们可以把update看作两部分:第一部分是把update括号内的对象实例化成一个新的集合:NewSet = set(“对象”),然后我们知道,这样实例化的集合会把对象的每一个字符单独抽出来组成集合,然后进行第二部分:s.add(NewSet),这样就相当于对s和NewSet做了并运算!于是就有了上面的结果。
第三点:
update括号内的对象类型可以不是基本数据类型,可以是元组、列表、甚至是集合,字符串。因为它们会像我上一个点说的那样,有两步操作,然后强制类型转换成集合类型,然后做集合的并运算!
1.3.2、移除集合中的元素:remove()方法与discard()方法
remove(x):如果x不存在则会返回一个异常
如果我们的程序需要捕捉异常并且处理异常,请用remove()方法!
discard(x):不管x在集合中是否存在,都不会返回异常
如果我们的程序不需要异常处理,那么就用discard()方法
做一个小小的实例:
s = set("123456789")
print(s)
s.remove('3')
print(s)
# s.remove('12')
# print(s)
s.discard('12')
上述代码大家可以自行实验,可以发现如果把我的注释去掉,就会报错:keyerror
1.4、求出集合的规模:len(Set)
1.5、清空集合:Set.clear()
1.6、判断某个元素是否在集合中:x in Set
1.7、判断集合之间的包含关系:Set1 <= Set2
1.8、专门想说说集合的无序和有序特点:对整数有序
一般来说,我们说集合是无序的,但是对于每一种情况都是无序的吗?意思就是说,如果创建集合的时候,集合的每一个元素都是整数,则这个集合会保持有序的性质。
二、列表:
2.1、关于列表:
没什么好说的,是序列类型最常见的一种,大多数的操作都和字符串一样,因为字符串本身和列表是很相似的(在C/C++中,数组可以比作列表,字符数组可以比作字符串)。但是和数组不一样的是,列表内的元素类型可以互不相同,而同一个数组的元素类型必须相同且有限制,哪怕C++的容器vector向量出现,也必须保证向量的元素类型相同!而python则没有这个要求!
2.2、补充一些列表常用方法:
2.2.1、删除列表中的元素:del 关键字
ls = ['abc', 'b', 'cd']
del ls[1]
print(ls)
lt = [1, 2, 3, 4, 5]
del lt[1: 2]
print(lt)
执行结果如下:
2.2.2、在列表最末尾添加元素:append()方法
lt = [1, 2, 3, 4, 5]
lt.append("hello")
print(lt)
输出:[1, 2, 3, 4, 5, “hello”]
2.2.3、向列表某个位置添加元素:insert(index, x)方法
lt = [1, 2, 3, 4, 5]
lt.insert(2, "hello")
print(lt)
输出:[1, 2, “hello”, 3, 4, 5]
总的来说,大概就是这些方法:
代码也比较简单,我觉得比较有用的,就是insert(index, x)、append(x)、index(x)、remove(x)、pop(index = -1)、这些比较常用!
三、元组
元组和列表的区别,就是元组是静态的,一旦发生变化,只可能重新开辟新的元组空间,赋予新的值给新的元组
四、字典
4.1、什么是字典:
没什么好说的,就是c++里的map,是一种映射(键值对方式),然后映射嘛,遵循数学定义,一个x不能对应两个y,也就是一个键不能对应两个值,所以说键是唯一的,而一个值可以对应多个键,所以说是值不一定。然后如果想打造一一对应关系呢?那就打造两个键值对相互映射,也就是两个字典!
4.2、字典的常用操作:
4.2.1、访问、创建、修改、删除字典的内容:
直接对索引指向的字典元素进行处理!
4.2.2、遍历字典:
d = dict()
d['a'] = 1; d['b'] = 2; d['c'] = 3; d['d'] = 4
for key in d:
if d[key] % 2 == 0:
print(key, d[key])
这里比较重要的一个点就是遍历键集合、因为我们的字典是键值对形式的,所以只要能够遍历键集合,那么就能遍历字典内容!
输出:
b 2
d 4