第二章、二进制运算、字符编码、数据类型总结

第二章


二进制运算、字符编码、数据类型

二进制与十进制转换

ASCII表

文字转2进制

计算机容量单位

字符编码

列表

  • 创建:
    • a = list()
    • a = []
  • 查询:
    • L2[2] 通过索引取值
    • L2[-1] 通过索引从列表右边开始取值
    • L2.index('a') 返回指定元素的索引值,从左右查找,找到第一个匹配值,则返回.
    • L2.count('a') 统计指定元素的个数
  • 切片:
    • L2[0:3] 返回从索引0至3的元素,不包括3,顾头不顾尾
    • L2[0:-1] 返回从索引0至最后一个值,不包括最后一个值
    • L2[2:] 返回从索引2至最后一个值,包括最后一个值
    • L2[3:6] 返回从索引3至6的元素
    • L2[:3] 返回从索引0至3的值,不包括3
    • L2[1: 6:2] 返回索引1至5的值,但是步长为2(每隔一个元素,取一个值)
    • L2[:] 返回所有的值
    • L2[::2] 按步长为2,返回所有的值
  • 增加:
    • L2.append("A") 列表最后面追加A
    • L2.insert(3, "B") 在列表索引为3的位置插入一个值 B
  • 修改:
    • L2[3] = "boy" 把索引3的元素修改为boy
    • L[4:6] = "Alex LI" 把索引4-6的元素改为Alex LI,不够的元素自动增加
  • 删除:
    • L2.pop() 删除最后一个元素
    • L2.remove('L') 删除从左找到的第一个指定元素
    • del L2[4] 用python全局的删除方法删除 指定元素
    • del L2[3:7] 删除多个元素
  • 循环:
    • for i in L2:
      • while 可以死循环,和for相比,一个无边界,一个有边界.
  • 排序:
    • L2.sort()
      • 不能对包含了str和int的列表进行排序
      • L2.sort()按照特殊字符>>>大写字母>>>>小写字母的顺序排列按照ASCII表的顺序排列
    • L2.reverse() 反转
  • 其他用法:

    • L2.extend([1,2,3,4]) 把一个列表扩展到L2列表,进行合并
    • L1+L2 两个列表直接相加,进行合并
    • L2[2][1] 嵌套列表取值
    • L2.clear() 清空列表
    • L2.copy()
  • enumerate() 枚举

    for index,p in enumerate(L2):
          print(index,p)
    

    copy方法

  • 通过id(a)方法查看a的内存地址
    >>> a = 1
    >>> b = a
    >>> id(a),id(b)
    (1615293920, 1615293920)
    >>> a = 2
    >>> id(a)
    1615293952
    
  • L1 = L2 将L1列表指向了L2列表的内存地址,是列表这个容器的内存地址,而不是列表中元素的内存地址.
  • L1[0] = "abc" L2列表中的第0个元素也会变为"abc"
  • 相当于L1和L2里面的元素是共享的,其实也就是同一内容.

浅copy

  • 通过L3 = L2.copy() 复制一个列表
  • 相当于执行了一次浅copy,仅对表层的内存地址进行了copy,深层次的比如说L2中的一个列表类型的元素里面的元素是共享的

深copy

import copy
L3 = copy.deepcopy(L2)

完全copy,所有的内部元素独立复制一份,不经常用,除非特殊场景,否则尽量不要用深copy.

字符串

  • 字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单、双、或三引号中间包含的内容称之为字符串。
  • 特性:
    • 有序
    • 不可变

字符串的方法

  • s.swapcase() 大写变小写,小写变大写,
  • s.capitalize() 首字母大写,其他都小写。
  • s.casefold() 全变成小写
  • s.center(50,'*') 字符串s居中,使用*来填充至50个字符。
  • s.count("o") 统计字符串s中“o“的个数,s.count("o",0,5)统计字符串s中从0至5字段中的o的个数。
  • s.expandtabs() 如果字符串s中有\t,使用s.expandtabs(20)将\t变成20长度
  • s.find("o",0,5) 在s中从0至5字段中的o的索引号,如果没有返回-1
  • s.format() 格式化输出 两种方式,位置{0}{1},或者 {a}{b},
  • s.format_map() 暂时略
  • s.index("h",0,5) 返回0至5字段中的h的索引值,找不到h会直接程序报错
  • "22dd".isalnum() 判断是否为阿拉伯字母和数字
  • s.isalpha() 判断是否为纯阿拉伯字母
  • s.isdecimal() 判断是否为整数
  • s.isdigit() 判断是否为整数
  • s.isidentifier() 判断是不是一个合法的变量名
  • s.islower() 判断s是不是全是小写
  • s.isnumeric() 判断是不是只有数字在s里面
  • s.isprintable() 判断s是不是可打印的,比如视频数据是不可打印的
  • s.isspace() 判断是否是空格
  • s.istitle() 判断每个单词的首字母是不是大写
  • s.isupper() 判断s是不是都是大写
  • ":".join(L1) 把列表L1里面的每一个元素使用:拼接起来输出为字符串
  • s.ljust(50,"-") 将字符串s变成长度50,不够的在后面用-补全
  • s.lower() 全变小写
  • s.upper() 全变大写
  • s.strip() 把首尾的换行、\t、空格都去掉
  • s.lstrip() 处理s字符串左边的换行、\t、空格
  • s.rstrip() 处理s字符串右边的换行、\t、空格
  • s.partition("o") 把s中的所有字符以"o"为中界线分开成三份
  • s.replace("g","G") 将s中的g替换为G
  • s.replace("o","-",1) 将s中的1个o替换为-
  • s.rfind("o") 从右边开始找第一个o的索引值
  • s.rfind()
  • s.rindex()
  • s.rjust()
  • s.rpartition()
  • s.split() 将s默认以空格分割成列表
  • s.split("o")
  • s.rsplit("o",1) 从
  • s.rstrip()
  • s.splitlines() 以换行分割成列表
  • s.startswith("hell") 判断s是不是以hell开始的
  • s.zfill(40) 将s长度变为40,不够的以0在开头补全

常用的字符串方法

  • isdigit()
  • replace()
  • find()
  • count()
  • strip()
  • split()
  • center()
  • froma()
  • join()

必须熟练掌握

元祖

  • 有序不可变的,只读列表
  • names = ("Alex","dc","jack")
  • names.count() names.index() 只有2个方法
  • 可以进行切片,因为切片是取数据
  • 如果元祖里面的元素是列表等可修改元素,这个列表中的内容是可以修改的.

    • a = (1,2,3,4,["dc","alex","dd"],"zz") 列表["dc","alex","dd"]中的"dc","alex","dd"是可以更改的.

      元祖用途:
      显示的告诉别人,此处数据不可修改
      数据库连接配置信息等

hash 散列

  •   Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数.
  • 特征:
    • hsah值的计算过程是依据这个值的一些特征计算的,这就要求被hash的值必须固定,因此被hash的值必须是不可变的
      • 不可变类型:数字,字符串,元组
      • 可变类型:列表
  • 用途:
    • 文件签名
    • md5加密
    • 密码验证
  • hash冲突
    • 如果程序中要被hash处理的数据量足够多,有可能不同的目标值产生的hash值会相同,因为hash的内部算法并不能100%使所有的值都不相同,所以要解决hash冲突

字典

  • 一种key-value的数据类型,使用就像我们上学用的字典,通过笔划,字母来查对应页的内容.
  • 特性:
    • key-value结构
    • key必须可hash,且必须为不可变数据类型,必须唯一
    • 可存放任意多个值,值可以修改,值可以不唯一
    • 无序
    • 查找速度快

字典操作

  • 增加
    • info["stu1104"] = "xiao cang"
  • 修改
    • info["stu1101"] = "wu teng"
  • 查找
    • "stu1192" in info #标准用法 在字典里面的话返回True,否则返回False
    • info.get("stu1102") # 获取stu1102的值
    • info["stu1102"] 也是获取stu1102的值,但是如果这个key不存在,就会程序报错,get不会,get不存在的key,只会返回None
  • 删除
    • info.pop("key") 删除key和这个key的value,返回删除的value
    • info.popitem() 随机删除info内的元素
    • del info["key"]

多级字典嵌套

  • 经常用到

其他方法

  • info.clear()
  • info.values 以列表形式输出所有的value
  • info.keys() 以列表形式输出所有的key
  • info.items() 将整个字典转换成了1个元组
  • info.update() 合并两个字典,key和value有的话就覆盖,没有的就创建
  • info.setdefault(2,"new 2") 如果有2这个key,就去查找2的value,如果没有就创建一个key为2,value为"new 2" 的元素
  • info.fromkeys([a,b,c]) 批量创建a,b,c key,值为None

循环

for k in info:  # 取info所有的key
for k in info:      # 常用的取key和value的方法
    print(k,info[k])
for k,v in info.items() # 低效的循环方法,请忘记
    print(k,v)

作业

posted @ 2018-04-11 23:17  dc0012  阅读(433)  评论(0编辑  收藏  举报