Python基础(七)

今日主要内容

  • 基础数据类型补充
  • 循环删除问题
  • 二次编码

一、基础数据类型补充

(一)int

  1. int.bit_length()

    • 计算整型对应的二进制位数
    a = 10
    print(a.bit_length())  # 4

(二)str

  • str.capitalize() 首字母大写,其余小写
    str.title() 每个用特殊字符隔开的首字母大写
    str.index() 计算元素索引位置
    str.find() 计算元素索引位置
    str.center() 将字符串居中
    str.format() 格式化输出
    str.swapcase() 大小写转换
  1. str.capitalize()

    • 将字串首字母大写,其余全部变为小写
    s = "hello WORLD"
    s1 = s.capitalize()
    print(s1)  # Hello world
  2. str.title()
    • 将每个用特殊字符、中文、空格隔开的英文单词首字母大写
    s = "hello world"
    s1 = s.title()
    print(s1)  # Hello World
  3. str.index(n)
    • 计算元素n的索引位置,若n不在字符串中,会报错
    • 默认计算第一个出现该元素n的索引位置
    • 也可指定在范围内查询
    s = "hello world"
    num = s.index("l")
    print(num)  # 2
    
    num1 = s.index("l", 5, 10)  # 9
  4. str.find()
    • 计算元素n的索引位置,若n不在字符串中,返回-1
    • 默认计算第一个出现该元素n的索引位置
    • 也可指定在范围内查询
    s = "hello world"
    num = s.find("l")
    print(num)  # 2
    
    num1 = s.find("l", 5, 8)  # -1
  5. str.center()
    • 输入一个长度,使字符串在这个长度内居中
    • 可填入第二个参数,居中后空白部分用它来填充
    s = "DNF"
    s1 = s.center(15, "*")
    print(s1)  # ******DNF******
  6. str.format()
    • 格式化输出
    • 按照位置格式化
    s1 = "name:{} age:{} sex:{}"
    print(s1.format("ZXD", 23, "man"))
    # name:ZXD age:23 sex:man
    • 按照索引格式化
    s1 = "name:{2} age:{0} sex:{1}"
    print(s1.format(23, "man", "ZXD"))
    # name:ZXD age:23 sex:man
    • 按照关键字格式化
    s1 = "name:{name} age:{age} sex:{sex}"
    print(s1.format(sex="man", age=23, name="ZXD"))
    # name:ZXD age:23 sex:man
    
  7. str.swapcase()
    • 将字符串大小写互换
    s = "hello WORLD"
    s1 = s.swapcase()
    print(s1)  # HELLO world
    

(三)list

  • list.reverse() 将列表反向排列
    list.sort() 将列表排序
  1. list.reverse()

    • 将列表反向排列
    lst = [1, 2, 3, 4, 5]
    lst.reverse()
    print(lst)  # [5, 4, 3, 2, 1]
    
  2. list.sort()
    • 将列表升序排序
    • 可填入关键字参数降序排序:reverse = True
    lst = [2, 5, 1, 3, 8]
    lst.sort()
    print(lst)  # [1, 2, 3, 5, 8]
    
    lst.sort(reverse = True)
    print(lst)  # [8, 5, 3, 2, 1]
    
  • 面试题:

    lst = [1, 2, [3]]
    lst1 = lst * 2
    lst1[2].append(4)
    print(lst1)  # [1, 2, [3, 4], 1, 2, [3, 4]]
    
    • 列表在使用乘法时,将列表所有元素乘以倍数放到一个新列表中,所以相同元素的内存地址相同,元素共用

(四)dict

  1. dict.fromkeys()

    • 批量创建字典,第一个元素迭代成为key,第二个元素为所有key共用的value
    • 两个坑:
      • 第一个坑,fromkeys方法是创建字典,而不是在字典中修改或添加
      dic = {}
      dic.fromkeys("abc", 123)
      print(dic)  # {}
      
      dic = dic.fromkeys("abc", 123)
      print(dic)  # {'a': 123, 'b': 123, 'c': 123}
      
      • 第二个坑,fromkeys的第二个参数是共用的,若是可变类型数据修改,则字典中u所有value全被修改
      dic = {}
      dic = dic.fromkeys("abc", [1])
      dic["c"].append(2)
      print(dic)
      # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2]}
      
  2. 字典定义
    • dic = {}
    • dic = dict()
    • dic = dict(key=value)
    • dic = dict([(key,value)])
    dic1 = dict(k1=1)
    print(dic1)  # {'k1': 1}
    
    dic2 = dict([("k1", 1)])
    print(dic2)  # {'k1': 1}
    

(五)类型转换

  1. 转换为bool

    • 所有的空、零转换为布尔类型都是False
    • 所有的非空、非零转换为布尔类型都是True
    print(bool())  # False
    print(bool(0))  # False
    print(bool([]))  # False
    print(bool(""))  # False
    print(bool({}))  # False
    print(bool(()))  # False
    print(bool(set()))  # False
    
  2. tuple与list互换
    • tu = tuple(list)
    • lst = list(tuple)
    l = [1, 2, 3]
    tu = tuple(l)
    print(tu)  # (1, 2, 3)  # 转换为元组
    
    lst = list(tu)
    print(lst)  # [1, 2, 3]  # 转换为列表
    
  3. set与list互换
    • lst = set(list)
    • st = list(set)
    l = [1, 2, 3]
    st = set(l)
    print(st)  # {1, 2, 3}  # 转换为集合
    
    lst = list(st)
    print(lst)  # [1, 2, 3]  # 转换为列表
    
  4. set与tuple互换
    • tuple(set)
    • list(tuple)
    t = (1, 2, 3)
    st = set(t)
    print(st)  # {1, 2, 3}  # 转换为集合
    
    tu = tuple(st)
    print(tu)  # (1, 2, 3)  # 转换为元组
    
  5. int和str互换
    • int(str)
    • str(int)
    i = 123
    s = str(i)
    print(s)  # 123  # 转换为字符串
    
    i = int(s)
    print(i)  # 123  # 转换为整型
    
  6. str和list互换
    • s = str.join(list)
    • lst = str.split()
    lst = ["a", "b", "c"]
    s = "_".join(lst)
    print(s)  # a_b_c
    
    lst = s.split("_")
    print(lst)  # ['a', 'b', 'c']
    

(六)基础数据类型总结

是否有序 是否可变 可否迭代 查看方式
int 有序(不支持索引) 不可变 不可迭代 直接查看
bool 不可变 不可迭代 直接查看
str 有序 不可变 可迭代 索引查看
tuple 有序 不可变 可迭代 索引查看
list 有序 可变 可迭代 索引查看
dict 无序 可变 可迭代 通过键查看
set 无序 可变 可迭代 直接查看

二、循环删除问题

(一)列表

  • 尝试一下利用循环列表删除元素,清空列表

    lst = [1, 2, 3, 4, 5]
    for el in lst:
      lst.remove(el)
    print(lst)  # [2, 4]
    
    • 发现列表并没有被清空,这是为什么呢?
  1. 原理:

    • for循环时,有一个元素指针记录当前循环位置,每循环一次指针就指向下一个位置,同时列表中的元素被删除会向前补位,这样就造成了一个位置差,导致元素删不干净

  2. 解决方法:
    • 方法一:for循环元素个数次,每次都删除第一个元素
    lst = [1, 2, 3, 4, 5]
    for i in range(len(lst)):
     lst.pop(0)
    print(lst)  # []
    
    • 方法二:复制一个副本,循环副本删除原列表
    lst = [1, 2, 3, 4, 5]
    lst1 = lst.copy()
    for el in lst1:
     lst.remove(el)
    print(lst)  # []
    

(二)字典

  • 尝试一下利用循环字典删除键值对,清空字典

    dic = {"k1": 1, "k2": 2, "k3": 3}
    for i in dic:
      dic.pop(i)
    print(dic)
    # RuntimeError: dictionary changed size during iteration
    
    • 报错:迭代期间字典长度改变
  • 解决方法:
    • 复制一个副本,循环副本删除原字典
    dic = {"k1": 1, "k2": 2, "k3": 3}
    dic1 = dic.copy()
    for k in dic1:
      dic.pop(k)
    print(dic)  # {}
    

(三)集合

  • 尝试一下利用循环集合删除元素,清空集合

    st = {1, 2, 3, 4, 5}
    for el in st:
      st.remove(el)
    print(st)
    # RuntimeError: Set changed size during iteration
    
    • 报错:迭代期间集合改变长度
  • 解决方法:
    • 复制一个副本,循环副本删除原集合
    st = {1, 2, 3, 4, 5}
    st1 = st.copy()
    for el in st1:
      st.remove(el)
    print(st)  # set()
    

三、二次编码

(一)编码回顾

  1. ascii码

    • 只包含英文、数字、特殊符号
    • 每个字符:一个字节,8位
  2. gbk:国标码
    • 包含中文、英文、数字、特殊符号
    • 英文:一个字节,8位
    • 中文:两个字节,16位
  3. unicode:万国码
    • 每个字符:四个字节,32位
  4. utf-8:可变长度编码
    • 英文:一个字节,8位
    • 欧洲文字:两个字节,16位
    • 中文:三个字节,24位

(二)编码与解码

  • Python3内存中使用的就是uncode
  • 硬盘中存储时选择的编码方式
    • gbk
    • utf-8
  • 用什么编码就要用什么解码
  1. 编码

    • 格式:数据.encode(编码)
    s = "你好啊"
    se = s.encode("utf-8")
    print(se)  # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a'
    
  2. 解码
    • 格式:编码后的数据.decode(编码)
    s = b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a'
    se = s.decode("utf-8")
    print(se)  # 你好啊
    
  3. 用处:
    • 存储:文件操作
    • 传输:网络编程

原文地址:https://www.cnblogs.com/tianlangdada/p/11531441.html

时间: 2024-08-02 13:49:47

Python基础(七)的相关文章

python基础(七)函数

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 函数的定义 首先,我们要定义一个函数, 以说明这个函数的功能. def square_sum(a,b): c = a**2 + b**2 return c 这个函数的功能是求两个数的平方和. 首先,def,这个关键字通知py

python 基础(七)

异常处理 一.需求 当遇到错误的时候 不让程序停止执行 而是越过错误继续执行 二.主体结构 (抓取所有异常) try:   可能出现异常的代码段 except:   出现异常以后的处理 三.处理特定异常(只捕获特定的异常) try:   # a   1 + '1'   # int('asd') except NameError as e:   print('NameError 错误信息为',e) 四.多重捕获 try:   # a   1 + '1'   # int('asd') except

Python基础七(函数)

函数概述 函数:组织好的.可重复使用的.杉树能提高应用的模块性和代码的重复利用性.Python提供了很多的内置函数,比如len()等等,可以自行定义函数. 函数的定义 def 函数名(参数列表):   #函数定义 函数体 函数名() #函数执行 def namePrint(): #函数定义,这是无参数函数 print("我的名字是:发发") name() #执行函数 def func2(a): #定义了一个有形参的函数 print(a) func2("123") #

Python基础(七)

目录 1 模块函数 1.1 模块函数 1.2 导入 1.2.1 import moudle 1.2.2 import module as alias 1.2.3 from module import function 1.2.4 from module import function as alias 2 自定义函数 2.1 定义函数 2.2 设置docstring 2.3 函数调用 2.4 返回值 2.5 形参 2.5.1 形参分类 2.5.2 * 与 ** 2.5.3 命名关键字参数 2.6

Python基础(七):异常处理

异常处理是确保程序在控制范围内运行的一个保障机制,在程序发生异常时执行应对措施,确保程序不会直接挂掉,并且让异常信息有迹可循,所以合理的异常处理机制也是保障程序健壮性的关键因素之一. 在Python中,异常处理的流程结构大致如下, try: 代码块1 except Exception as e: 代码块2 raise e else: 代码块3 finally: 代码块4 下面详细说明各个关键字的用法, 1.try 如果程序中有一些操作可能会出现异常,那么就把这些代码放在try语句后面,比如一些用

python基础七--异常处理

异常处理try,except,else,finally的使用和实例. 1.异常处理说明 try: 5/0 except Exception as e: #这个exception 能捕捉到所有的异常 print('异常信息:',e) #这个是出了异常的话,怎么处理,e代表异常信息 else: print('没有出异常的话,走这里') #若是没有出现异常,运行else finally: print('这里是finally') #无论是否出现异常,都会执行finally 2.判断小数(判断s是否可以转

Python基础篇(七)

加上两个下划线变量或者方法变为私有. >>> class Bird: ...    __song = "spark" ...    def sing(self): ...       return self.__song ... >>> b = Bird() >>> b.sing() 'spark' >>> b.__sing() Traceback (most recent call last): File &qu

Python基础学习笔记(七)常用元组内置函数

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 Python常用元组内置函数: 序号 方法及描述 1 cmp(tuple1, tuple2)比较两个元组元素. 2 len(tuple)计算元组元素个数. 3 max(tuple)

Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1)   静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法.普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访

Python基础教程系列:七、字典

字典是Python语言中唯一的映射类型.映射类型不要求用数字值做索引就可以从一个容器中获取对应的数据项.你可以用键(key)直接映射到值,这就是为什么叫映射的原因,映射,我的理解就是索引,顺藤摸瓜就可以找到背后的幕后者.字典是Python中最强大的数据类型之一. 刚开始接触字典还是在Hadoop中的mapreduce,其实说白了就是键值对(key/value),所谓的索引通常是指key,而幕后者通常指的是value.每个key对应一个value,主要的好处是方面归类,而且按照key进行查找val