• 路飞学城系列:第2章 数据类型&文件操作-学习笔记【2.1-2.34-列表细讲、元组、字符串细讲、字典、集合、二进制与字符编码、16进制、HASH、为何dict字典查询速度快、用py操作文件、file类的其它必用功能等】


    【视频观看速率为 1.0x-1.5x】

    【学习疑问:暂未找到更高效、合理的学习方法,学习效率低下,继续探索吧

    1、待优化:每日学习时间(分配不足),执行力(执行不足易分心),打卡(跳票有些严重)。

    2、关于笔记整理:在luffy-book上,已经有非常详细的记录了,感觉在博客上的再次整理笔记,仅仅起到了一次回顾内容的作用?(建议:跟导师、班级群里,都沟通交流一下学习心得。)

    3、关于笔记整理:后边考虑通过Xmind思维导图,来详细整理汇总知识点,用于快速检索记忆。】

    2.3、细讲数据类型-列表

    2.3.1、列表的增加操作:

    追加,appent() ,数据会追加到尾部

    插入,insert() ,可插入任何位置

    合并 ,extend() ,可以把另一个列表的值合并进来. 

     列表嵌套,列表里边可以嵌套列表

    2.3.2、列表的删除操作:

    del 直接删,可以删除列表元素,也可以删除列表。  del names[3] 或 del names

    pop 删,删除元素、并把删除的值作为返回值。pop()

     

    clear 清空,clear()

     

     2.3.3、列表的修改操作:

      2.3.4、列表的查询操作:index()、count()

     

       2.3.5、切片

     *切片的特性是顾头不顾尾,即start的元素会被包含,end-1是实际取出来的值

    倒着切:

     

     步长,允许跳着取值

     

     列表反转:a[::-1]

       2.3.6、排序 和 反转

     排序:sort()

     反转:reverse()

       2.3.7、循环列表

    2.4、细讲数据类型-元组

    定义:与列表类似,只不过[]改成()

    特性:

      1.可存放多个值

      2.不可变

      3._按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序

    创建

    ages = (11, 22, 33, 44, 55)
    #或
    ages = tuple((11, 22, 33, 44, 55))

    常用操作

    #索引
    >>> ages = (11, 22, 33, 44, 55)
    >>> ages[0]
    11
    >>> ages[3]
    44
    >>> ages[-1]
    55
    #切片:同list  
    #循环
    >>> for age in ages:
        print(age)
    11
    22
    33
    44
    55
    #长度
    >>> len(ages)
    5
    #包含
    >>> 11 in ages
    True
    >>> 66 in ages
    False
    >>> 11 not in ages
    False

    注意:元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变。
    >>> data 
    (99, 88, 77, ['Alex', 'Jack'], 33)
    >>> data[3][0] = '金角大王'
    >>> data
    (99, 88, 77, ['金角大王', 'Jack'], 33)


    2.5、细讲数据类型-字符串

     字符串的常用操作:

     

    # # 字符串前边加r(raw,原生字符),表示转义,与前边再加上\转义是类似的
    # name = "lizhen 111"
    # print(name)
    # name = r"lizhen 111"
    # print(name)
    # format的使用,字符串格式化,官方推荐使用
    # show_me = "Hello , my name is {0} , i am {1} years old."
    # print(show_me.format("lizhen" , 30))
    # isdigit() ,判读是否为整数,负数不是整数,-号会被认为是特殊字符
    # print(name.isdigit())
    # print("123".isdigit())
    # print("1.1".isdigit())
    # print("-1".isdigit())

    # isspace,判断是否为空格
    # print(" ".isspace())
    # print("11 11".isspace())

    关于join,只能拼接字符串。

    n = ["李祯", "小强", "黄宁明", "李涛"]

    print(id(n))

    print(n)

    print(id("-".join(n)))

    print("-".join(n))

    # "-".join() 可以把一个列表中元素,设置特定字符拼接出来
    # n = ["李祯", "小强", "黄宁明", "李涛"]
    # print(id(n))
    # print(n)
    # print(id("-".join(n)))
    # print("-".join(n))
    #
    # n2 = "huangningming"
    # print("-".join(n2))
    #

    # n3 = " lizhen "
    # # print(n3)
    # # print(n3.strip()) # 去除两边的空格和特殊字符
    # # print(n3.lstrip())  # 去除左侧的空格和特殊字符 
    # # print(n3.rstrip()) # 去除右侧的空格和特殊字符

    # n4 = "lizhen"
    # print(n4)
    # print(n4.rjust(25, "*")) # 字符串左侧,打印25个*
    # print(n4.ljust(25, "*")) # 字符串右侧,打印25个*


    关于字符串内置方法, lower() 与 casefold() ,都可以把字符串,由大写转换为小写。

    区别:lower() 只对 ASCII 也就是 'A-Z'有效,但是其它一些语言里面存在小写的情况就没办法了。文档里面举得例子是德语中'ß'的小写是'ss'

    建议:汉语 & 英语环境下面,继续用 lower()没问题;要处理其它语言且存在大小写情况的时候再用casefold()


    # n5 = "lizhen"
    # print(n5.capitalize()) # 首字母大写
    n6 = "LiZHen"
    print(n6.casefold()) # 大写全部转小写
    # print(n6.swapcase()) # 大写变小写,小写变大写
    print(n6)

    name = "LiZhen"
    print(id(name))
    # print(id(name.lower()))
    # print(id(name.upper()))
    print(name.lower())
    # print(name.upper())
    print(name)


    # n7 = "Welcome to beijing"
    # print(n7.endswith("ing")) # endswith , 判断以什么为结尾
    # print(n7.endswith("ong"))
    # print(n7.startswith("Wel")) # startswith , 判断以什么为开头
    # print(n7.startswith("wel"))
    # print(n7.count("o"))
    # print(n7.find("to"))
    # print(n7.replace("o", "OOO", 1))
    # print(n7.split())
    #
    # n8 = "Welcom,e t, obeijing"
    # print(n8.split(","))
    # print(n8.split(",", 1))
    
    
    2.6、细讲数据类型-字典

    # ##### 创建
    # print(list([1,2,3]))
    # print(dict(name="lizhen", age=18))

    # person = {"name": "牛魔王", "age": 18} # 方式1
    # person = dict(name="牛魔王" , age=18) # 方式2
    # person = dict({"name": "牛魔王", "age": 18}) # 方式3,该方式不常用
    # print(person)

    # key = ["李祯", "小明", "小强"]
    # dict_piliang = {}.fromkeys(key, 18) # 方式4,批量生成value值
    # print(dict_piliang)

    # ##### 增
    # person = {"name": "李祯", "age": 18}
    # print(type(person))
    # print(person)
    #
    # person["job"] = "teacher"
    # print(person)
    #
    # person["name"]= "牛魔王"
    # print(person)
    #
    # person["salary"] = [1000,2000,3000] # 新增的时候,已经有了这个key,则会修改。没有key则新增。
    # print(person)
    #
    # person.setdefault("salary",[1000,2000,3000,6666]) # setdefault,在新增的时候,如果发现已经有这个key,就不会再新增了。
    # print(person)
    #
    # person.setdefault("haveFriendGirl", ["大老婆", "小老婆", "小情人"])
    # print(person)


    # ##### 删
    # person = {'name': '牛魔王', 'age': 18, 'job': 'teacher','haveFriendGirl': ['大老婆', '小老婆', '小情人'],
    # 'salary': [1000, 2000, 3000]}

    # del person["salary"]
    # print(person)
    # del person # 直接删除该字典,再打印字典就会报错了。
    # print(person)
    # print(person.pop("job")) # 删除指定键,并且返回改键的值
    # print(person)
    # print(person.popitem()) # 随机删除一个键值,但是我测试没有随机删、一直删最后一对键值?数据量太小了?
    # print(person)
    #
    # person.clear() # 清空
    # print(person)

    # ##### 改
    # person = {'name': 'Jack Li', 'age': 18}
    # person2 = {'age': 30, "salary": [111,222,333]}
    # print(person)
    # print(person2)
    #
    # person.update(person2) # 2个字典合并,并且更新
    # print(person)

    # ##### 查
    # person = {'name': 'Jack Li', 'age': 18}
    # # person2 = {'age': 30, "salary": [111,222,333]}
    # # print(person["name"])
    # # print(person["name2"]) # 如果字典中不存在这个键值,则会报错
    # print(person.get("name"))
    # print(person.get("name2"))

    # print("name" in person)
    # print("name2" in person)

    # print(person.keys())
    # print(person.values())
    # print(person.items())

    # ##### 循环

    # # 1、for k in dic.keys()
    # person = {'name': '牛魔王', 'age': 18, 'job': 'teacher'}
    # for i1 in person.keys():
    # print(i1)

    # # 2、for k,v in dic.items()
    # person = {'name': '牛魔王', 'age': 18, 'job': 'teacher'}
    # print(person.items())
    #
    # for i in person.items():
    # print(i)
    #
    # for k,v in person.items():
    # print(k,v)

    # # 3、for k in dic # 推荐用这种,效率速度最快
    # person = {'name': '牛魔王', 'age': 18, 'job': 'teacher'}
    # for i in person: # 官方推荐,效率最高的一种循环
    # # print("键为{0},值为{1}.".format(i, person[i]))
    # print(i,person[i])

    # # 求长度
    # person = {'name': '牛魔王', 'age': 18, 'job': 'teacher'}
    # print(len(person)) # len() ,通用方法
    2.7、细讲数据类型-集合
    # # 学python的用户
    # python_users = [1,2,3,6,8]
    # # 学前端web的用户
    # web_users = [2,4,6,10,15]
    #
    # #取出既学python、又学前端web的用户
    # both_users = []
    #
    # for i in python_users:
    # if i in web_users:
    # both_users.append(i)
    #
    # # 打印
    # print(both_users)



    # 集合:主要做两件事,去重和关系运算

    # test = [1, 2, 3, 6, 8, 2, 4, 6, 10, 15]
    # print(test)
    # test1 = set(test) #set()是集合的语法
    # print(test1)
    # print(type(test1))
    #
    # # 增
    # test1.add("66")
    # print(test1)
    #
    # test1.add(2)
    # print(test1)

    # 删
    # test1.discard(10) # 删除值
    # test1.discard(10) # 没有值时,也不会报错
    # print(test1)

    # test1.pop() # 随机删
    # print(test1)

    # test1.remove(8)
    # print(test1)

    # 查
    # print(2 in test1)

    # 改,呵呵,不能改。

    # #关系运算

    s_1024 = {"黄宁明", "老男孩", "李祯", "牛魔王", "李涛", "熊星宇", "Jack"}
    s_pornhub = {"牛魔王", "Alex", "小明", "李祯", "Jack", "刘德华"}

    print("喜欢看{0}的人:{1}".format("1024社区", s_1024))
    print("喜欢看{0}的人:{1}".format("pornhub社区", s_pornhub))

    # 交集 &, elements in both set
    # print(s_1024 & s_pornhub)

    # 并集 | 合集
    # print(s_1024 | s_pornhub)

    # 差集 -, only in 1024
    # print(s_1024 - s_pornhub)

    # 差集 -, only in pornhub
    # print(s_pornhub - s_1024)

    # 对称差集 ^,把脚踩2只船的人T出去
    # print(s_1024 ^ s_pornhub)

    # 两个集合之间一般有3种关系,相交、包含、不相交。在Python中分别用下面的方法判断:
    print(s_1024.isdisjoint(s_pornhub)) # 判断2个集合是不是相交,返回True 或 False
    print(s_1024.issubset(s_pornhub)) # 判断s_1024是不是s_pornhub的子集,返回True 或 False
    print(s_1024.issuperset(s_pornhub)) # 判断s_1024是不是s_pornhub的父集,返回True 或 False
    print({1,2,3}.issubset({1,2,3,4,5}))
    print({1,2,3,4,5}.issuperset({1,2,3}))

    2.8、二进制

    长城,狼烟,0-1(开关,是否点燃),人数。

    比如第1根烟,就让它代表1。点着了就是1,没点就是0。

    比如第2根烟,就让它代表2。点着了就是2。

    比如第3根烟,就让它代表4。点着了就是4。

    规律:(从右[前]往左[后])

    1、后面每根烟的值=前面所有烟的值相加+1

    2、例如:8根烟,能表示的数字,就是2**8【2的8次方】

    3、逢2进1。

     

    规则:

    1、论断句的重要性,8个二进制数字,代表一个字符(ASCII表中、最大字符也就255)。

    2.9、字符编码

    ASCII字符编码表

    bit(比特),计算机中最小的表示单位。

    8bits=1bytes(代表1个字符),bytes是计算机中最小的存储单位。

     

     

    py2 vs py3

    py3全面支持unicode,py2不支持、所以无法写中文。

     

    py文件首行写上

    方法1# coding:utf-8 即可设定好编码。    【导师推荐写法】

    方法2# -*- encoding:utf-8 -*-          【官方推荐写法】

     

     

     

     

    # # 十六进制转十进制,公式:
    # # 1000 = 1x16^3(16的3次方)+ 0x16^2(16的2次方)+ 0x16^1(16的1次方)+ 0x1(16的0次方)
    # shijinzhi_num = 1*16**3 + 0*16**2 + 0*16**1 + 0*16**0
    # print(shijinzhi_num)
    # shiliu_num = hex(shijinzhi_num)
    # print(shiliu_num)
    #
    # # 计算十六进制转为十进制 FC45
    # num_FC45 = 15*16**3 + 12*16**2 + 4*16**1 + 5*16**0
    # print(num_FC45)
    # print(hex(64581))

    # 十进制转十六进制
    num23612_convert16 = []
    print(23612//16)
    print(23612%16) # c
    print(1475//16)
    print(1475%16) # 3
    print(92//16)
    print(92%16) # c
    print(5//16)
    print(5%16) # 5

    print("5c3c")
    print(hex(23612))

    2.10、HASH

    print(hash("我爱你"))
    print(hash("我爱你"))
    print(hash("我爱你"))


    2.11、用Python操作文件

     

     

     

     

     

    # 文件操作代码练习:

    全局操作文件: https://www.cnblogs.com/lizhen416/p/13592303.html

    模拟登录:  https://www.cnblogs.com/lizhen416/p/13610613.html




  • 相关阅读:
    python 查看源代码
    团队项目5-冲刺合集
    系统设计(团队作业4)
    《次元唤醒 需求规格说明书v1.0》
    团队选题报告
    来自异次元的一篇博客
    《口算大作战 概念版》功能规格说明书
    我不会优化啊!!!
    Python装饰器实现异步回调
    Python杀死windows进程
  • 原文地址:https://www.cnblogs.com/lizhen416/p/13610835.html
Copyright © 2020-2023  润新知