t1 = [1, 1, 3, 4, 5, 4, 5]
t2 = [8, 7, 6, 5, 3, 2, 1]
s1, s2 = set(t1), set(t2)
print('s1 = ', s1 )
print('s2 = ', s2 )
print('s1 - s2 = ' , s1 - s2)
print('s2 - s1 = ' , s2 - s1)
print('s2 - s1 <= s1 : ', s2 - s1 <= s1) # 判断s2 与 s1的差集是否是 s1的子集
print('s2 - s1 <= s2 : ', s2 - s1 <= s2) # 判断s2 与 s1的差集是否是 s2的子集
print('s1 <= s2 : ', s1 <= s2) # 判断s1 是否是 s2 的子集
s3 = s1.intersection(s2) # 计算 s1 与 s2 的交集
print('s3 = ', s3)
s4 = s1.union(s2)
print('s4 = ', s4) # 计算 s1 与 s2 的并集
Counter 是一个计数器, 提供了一些与计数相关的功能
Counter 是一个特殊的字典, 可用任意可以迭代的序列进行初始化, 键为对应的序列元素, 值为整数, 表示各元素出现的次数
需要指出的是, 用于初始化Counter的序列中的元素必须是可哈希的
from collections import Counter
count = Counter("A woman's heart is the deep ocean of secret")
print(count) # count 统计了各元素出现的次数, 并对元素按照次数从高到低进行了排序
print(count['B']) # 如果访问的元素没有出现过, Counter将返回0, 而不会报错
for key, freq in count.most_common(): # most_common返回一个由key-value pairs组成的list, 并且是排好序的
print(key, freq)
defaultdict 与 dict 非常相似, 只不过当你访问一个不存在的元素时, 它不会报错, 而是生成一个默认值作为该键的值
创建 defaultdict 时需要提供一个类名用于创建相应的默认值
from collections import defaultdict
# 当要创建一个值为list的字典时, 使用defaultdict会很方便
# 例如这里要统计上面那个Counter中出现相同次数的字符有哪些, 可以这样做
dd = defaultdict(list) # 注意这里的list是类名, 不是函数, 也不是对象
for key, freq in count.most_common():
dd[freq].append(key) # 这里就不用判断访问的键有没有出现过
for key, val in dd.items():
print(key,' : ', val)
当我们定义像java bean( 类中只有一些属性, getter, setter, 以及toString() 等函数 )那样的简单类时, python提供了更简单的工具
来帮我们生成一种数据类型, 它就是namedtuple
from collections import namedtuple
Person = namedtuple('Person', ['name', 'age', 'sex' ])
# 第一个参数 'Person' 表示要创建的类型的名字,
# 第二个参数是一个list, 表示要创建的类型具有的属性, list中的元素必须是字符串, 且能表示一个合法的标识符
print(Person)
print(list)
print(dict)
print(int)
# 可以看到, Person和list, dict 等一样都是class, 只不过 Person 是定义在__main__这个作用域里面而已
ps = Person('jack', 20, 'male') # 使用 类型名() 的语法格式创建对象
print( ps ) # namedtuple自动帮我们写好了__str__ 函数
print(ps.name, ps[1], ps.sex) #可以通过下标和小数点的方式访问对象的属性
name, age, sex = ps # 还能像tuple一样自动进行 scatter 操作
print(name, age, sex)
ps2 = Person(name='bob', age=21, sex='male') # 还可以使用关键字参数创建 Person对象
print(ps2)
# 当我们需要为该类增加新功能时, 可以创建一个新类继承自用 namedtuple创建的类
class Student(Person):
def __init__(self, *args, **kw):
pass