zoukankan      html  css  js  c++  java
  • python学习笔记-day5

    元组tuple

    只读列表,不能修改
    names = ()

    字典dict(像对象)

    {key1:value1,key2:value2}
    info={
      "name"="lc"
      "age" = 21
    }
    info['age'] = 21 #对象通过key查询
    

    dict特性

    1. key-value结构
    2. key必须为不可变的数据类型(字符串,数字,元组,不能是列表)
    3. key必须唯一(hashtable)
    4. 一个key对应的value可以存放任意数据类型,可修改,可以不唯一
    5. 可嵌套,即value也可以是dict
    6. 查询速度快,且不受dict大小影响

    dict用法

    创建:

    #方法一:
    info2 = {
      "name":"lc:
      "age":21
    }
    #方法二:key不加引号
    info = dict(name = "lc,age = 21)
    

    新增:

    info["salary"] = 5000
    

    检查式新增:

    #向dict中新增一个key,value值,如果这个key不存在则新增,如果key已存在则返回已存在的key对应的value
    info.setdefault("job","student")
    

    修改:

    #普通修改
    info["name"] = "lyd"
    #合并修改
    info1 = {
      "lc"=[21,20000]
      "lyd"=[21,30000]
      "wsq"=[21,20000]
    }
    info2 = {
      "lc"=[22,30000]
      "ghx" = [22,30000]
    }
    info1.update(info2) #把info2的每个k,v赋值给info1,相同key则覆盖
    

    查:

    #get
    info1.get("lc") #返回value,即便key不存在也不会报错
    #直取
    info["lc"]#key不存在会报错
    #判断是否在dict中有指定的key
    "lc" in info #返回True Flase
    #
    dict.keys() #返回一个包含多有key的列表
    dict.values() #返回一个包含所有value的列表
    dict.items() #返回一个包含所有(键,值)元组的列表
    

    删:

    dict.pop("lc") #删除指定key
    del dict["lc"] #删除指定key
    dict.popitem() #以LIFO(栈)删除一对值
    dict.clear() #清空dict
    

    循环:

    1. for k in dic.keys()
    2. for k,v in dic.items()
    3. for k in dic #推荐,效率更高
    

    特殊方法:

    formkeys:批量生成多个k,v的dict
    
    n = ["lc","peiqi","lyd"]
    d = dict.fromkeys(n,0)
    {"lc":0,"peiqi":0,"lyd":0}
    

    copy: 浅copy,同列表的copy一样

    求长度:

    len(info) #len()方法可同时用于列表,字符串
    

    字典为何查询这么快?

    因为dict是基于hashtable实现的,hashtable的原理导致查询速度就是O(1),

    集合set

    1. 集合元素不可变,代表着不可以存一个list,dict在集合里,字符串,数字,元组等不可变类型可以存
    2. 天生去重,在集合里没有办法存重复元素
    3. 无序,不像列表一样通过索引来标记在列表中的位置,元素是无序的,集合中的元素没有先后之分,如{3,4,5}和{3,5,4}算作在同一个集合
    4. 关系测试(作用):基于以上特性,我们可以用集合来:去重和关系运算

    创建:

    a = {} #不是集合!! {}默认是字典dict
    a = {3} #是集合
    

    增:

    a = {1,2,3,4,5}
    a.add(9)
    

    查:

    3 in a 返回True False
    

    改:

    不能修改已存在的元素
    

    删除:

    a.pop() #随机删除一个值,并返回该值
    a.remove(3) #删除3这个元素,若3不存在则会报错
    a.discard(8)#删除8指定的值,若该值不存在,不会报错
    

    copy同列表

    关系测试

    A = {'a','b','c','d'}
    B = {'a','b','e','f'}
    交集:

    #方法一:符号&
    A & B  #返回一个新集合
    #方法二:
    A.intersection(B)
    

    并集:

    #方法一:符号|
    A | B  #返回一个新集合
    #方法二:
    A.union(B)
    

    差集:

    #方法一:符号 -
    A - B  #返回一个新集合
    #方法二:
    A.difference(B)
    

    对称差集:相交的部分踢出去

    #方法一:符号 ^
    A ^ B  #返回一个新集合
    #方法二:
    A.symmetric_difference(B)
    

    子集,父集:返回True False

    #方法一:
    A.issubset(B) #是不是B的子集,
    #方法二:
    A.issuperset(B) #是不是B的父集
    

    测试后修改:

    A.difference(B) 
    {'c','d'}
    A.difference_uodate(B)
    A -> {c,d} #把A覆盖了
    

    二进制

    a = 0011 1100 -> 60
    b = 0000 1101 -> 13
    运算符:

    &:按位与,都为1 则为1 (位相乘)
    (a & b) = 12 -> 0000 1100
    
    | :按位或,有一个为1,则为1(位相加)
    (a | b) = 61 -> 0011 1101
    
    ^ :按位异或,相异时结果为1 (位相减)
    (a ^ b) = 49 -> 0011 0001
    
    ~ :按位取反,对数据的每个二进制位取反 ~x = -(x+1)
    (~a) = -61 -> 1100 0011
    
    >>: 右移 运算数的各二进制位全部右移若干位 除2
    a>>2  15
    a>>1  30
    
    <<: 左移 乘2
    a<<2  60
    

    ASCII码

    ord('a') -> 97
    chr(97) -> 'a'
    

    字符串->列表 list(a)

  • 相关阅读:
    C++中左移<<的使用
    学会构造素数序列
    有关lower_bound()函数的使用
    Codeforces Round #166 (Div. 2)
    暴力swap导致TLE问题解决办法
    memset的正确使用
    Codeforces Round #297 (Div. 2)
    Codeforces Round #170 (Div. 2)B
    Codeforces Round #176 (Div. 2)
    C/C++ sort函数的用法
  • 原文地址:https://www.cnblogs.com/liuChang888/p/15032019.html
Copyright © 2011-2022 走看看