Python3基础语法之集合类型
set也是一种组合数据类型,支持成员关系操作(in)、对象大小计算操作符(len()),并且是iterable。集合数据类型至少提供一个set.isdisjoin()方法,支持比较,也支持为逻辑操作(在集合用于联合、交叉等上下文中使用)。只有可哈希运算的对象可以添加到集合中,可哈希运算的对象包含一个__hash__()特殊方法,其返回值在某个对象的整个生命周期内都是相同的,并且可以使用__eq()__特殊方法进行相等性比较。
所有内置的固定数据类型(比如float、frozenset、int、str、tuple)都是可哈希运算的,都可以添加到集合中。内置的可变数据类型(比如dict、list、set)都不是可哈希运算的,因为其哈希值会随着包含项数的变化而变化。
操作符==与!=都是逐项比较(对嵌套项,比如集合内的元组或固定集合,则递归比较)其他比较操作符则进行子集比较火超集比较。
可变的set类型 {}
集合中的项是无序的,没有索引位置的概念,不能分片或按步距分片。set数据类型可以作为函数进行调用,不带参数进行调用时将返回一个空集合;带一个set参数时返回该参数的浅拷贝;对任意其他参数,则尝试将给定的对象转换为集合。空集合必须使用set()创建,而不能使用{}来创建。
set(“apple”)、set(“aple”)和{‘e’,‘p’,‘a’,‘l’}产生的三个集合都是一样的。集合常用语删除重复的数据项。比如,x是一个字符串列表,在执行x=list(set(x))后,x中的每个字符串都将是独一无二的,存放顺序也是任意的。集合支持内置的len函数,也支持使用in与not in进行快速成员关系测试。
举例,从文件列表中删除makefile文件
集合内涵
除了调用set()创建集合,或使用集合字面值创建集合外,可以使用集合内涵创建集合。
举例:html = {x for x in files if x.lower().endswitch((".htm",".html"))}
集合内涵中使用的iterable本身也可以是集合内涵(或任何其他类型的内核)
tem = set() for x in files if x.lower().endswith((".htm",".html")) tem.add(x)
固定的frozenset类型
固定集合是指一旦创建旧不能改变的集合,固定集合只能使用frozenset数据类型函数进行创建,不带参数调用时,frozenset(0将返回一个空的固定集合,带一个frozenset参数时,将返回该参数的浅拷贝,对任何其他类型的参数,都尝试将给定的对象转换为一个frozenset。该函数只能接受一个参数。
如果将二元运算符应用于集合与固定集合,那么产生结果的数据类型与左边操作数的数据类型一致。因此,如果f是一个固定集合,s是一个集合,那么f&s将产生一个固定集合,s&f则产生一个集合。在使用与!=等操作符时,操作数的顺序无关紧要,如果两个集合包含相同的项,那么fs结果为True。
本文地址:https://blog.csdn.net/asmartkiller/article/details/108237831