python学习笔记:集合set,函数基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WilliamCode/article/details/85170796

1、遍历字典
    for k,v in d:
    则k,v分别是字典中键值对的键和值
2、字典的推导式
    比如d = {x:x**2 for x in range(10)}
    # d = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
3、例题:生成{'A1':'A_1','A2':'A_2',’A3':'A_3','B1':'B_1',...}字典,直到C3结束
    代码:d = {chr(a) + chr(b) : chr(a) + '_' + chr(b) for a in range(ord('A'),ord('C')+1) for b in range(ord('1'),ord('3')+1)}

4、字典vs列表
    都是可变对象
    索引方式不同,列表用于整数索引,字典用任意类型不可变对象做索引
    字典的查找速度要快于列表
    列表的存储是有序的,字典的存储是无序的
5、集合set
    集合是可变对象
    集合内的数据对象都是唯一的,不能有重复
    集合是无序的存储结构,集合中的数值没有先后关系
    集合内的元素必须是不可变对象(元组、字符串、单个数据)
    集合是可迭代对象
    集合相当于只有键没有值的字典,键就是集合的数据
6、创建空集合
    s = set()
    注意:不能使用s = {} 创建集合,那样创建的对象的字典
7、创建非空集合
    集合内部变量必须都是不可变对象
    s = {1,2,3}
    s = {'a','b','c'}
    s = {1,'A'}
    s = {'a',[1,2,3]} #这样是错误的,列表不能加入集合
    a = 1234 
    s = {a,1,2,3}这里a的不是引用,而是代表一个实际的数值
8、集合set的构造函数
    s = set()
    s = set(iterable)用可迭代对象生成一个对象
    #s = set("hello") = {'h','e','l','o'}且并不保证其顺序,重复的元素算一次 
9、集合的运算
    交集、并集、补集、子集、超集
    &     |     ^     -
    &:生成两个集合的交集
    |:生成两个集合的并集
    -:生成两个集合的补集,s1-s2代表从s1中减去存在于s2中的数据元素
    ^:生成两个集合的对称补集,s1^s2代表从s1和s2的并集中减去交集中的元素
    s1 = {1,2,3}
    s2 = {2,3,4}
    s1 & s2 = {2,3}
    s1 | s2 = {1,2,3,4}
    s1 - s2 = {1}
    s1^s2 = {1,4}
10、集合的比较
    > >= < <= == !=
    s1 > s2 True if s1是s2的超集
    s1 < s2 True if s1是s2的子集
    <= 和 >= 比上述多了一个等于,即集合是否相同
    == != 判断集合是否相等
11、in 和 not in 运算符
    优点:运算速度快于列表和字符串

12、集合常用方法
    S.add(e)    向集合中添加元素e
    S.remove(e)    从集合中删除元素e,若不存在,产生错误
    S.discard(e)    删除元素,不存在不产生错误
    S.clear()    清空集合
    S.copy()    浅拷贝一个集合
    S.pop()        从集合中删除一个随机元素,返回被删除的值,若集合为空则产生错误
    S.update(S2)    将S2并如S中,更新变量S
    其他常用方法均可用上述算术运算代替

13、集合的推导式
    例子:
    l = {"Jenny","Tony","Animal","Oliga","Jim"}
    s = {x for x in l if len(x)>=4}
    #从list中筛选长度大于4的字符串加入集合
    if 语句可以省略
14、固定集合frozenset
    是不可变的,无序的,含有唯一元素的容器
    可以作为字典和集合的键
    发现:python中有一个可变的可迭代对象,就会有一个对应的不可变对象,比如
    list -> tuple
    set -> frozenset
    在通信(传输)过程中能够避免错误
    
15、创建固定集合
    frozenset()
    frozenset(iterable)
16、运算符和集合完全一样
    方法相当于去掉集合的全部方法中修改集合的方法
17、函数
    函数的作用:封装语句块,提高代码重用性;允许用户定义用户级别的函数
18、定义一个函数
    def 函数名(参数列表):
        语句块(代码块)
    说明:函数的名字就是语句块的名称
    函数名的命名规则和变量相同
    函数名是一个变量,不要对其轻易赋值
    函数的参数列表可以为空
    语句部分不能为空,如果为空需要空pass填充
    例子:
    def say_hello():
        print("hello world!")
19、调用函数
    函数名(实际传入参数(实参))
    说明:
    如果函数内部没有return语句,汗珠执行完毕后返回None对象
    如果函数需要返回其他对象,需要用到return语句
    函数的传参是引用传参
20、return语句
    return [表达式]    
    []代表可以省略
    如果没有return,函数最后自动加上return None,函数调用返回一个对象的引用    
21、练习:常用的筛素数函数
    #筛出0-a之间的素数,并返回列表
    def ShaiSushu(a):
    if a < 2:
        return None
    l = list()
    l.append(2)
    for i in range(3,a+1):
        flag = 1
        for j in range(0,len(l)):
            if i % l[j] == 0:
                flag = 0
        if flag == 1:
            l.append(i)
    return l
    运行ShaiSushu(100000)时感觉很慢,测了一下时间,运行了56.26162052154541s!!!!!!(不打印)
    What?
    有点汗颜,写了份c++代码,只用了2.005s(不打印)
    
    是谁在网上分析一大堆,说pypy解释器一直在优化性能,有些时候性能能够接近C速度??!
    性能差了30倍!
    看来还是的学好C和C++啊

猜你喜欢

转载自blog.csdn.net/WilliamCode/article/details/85170796