基础数据类型的补充;编码的进阶

  • str

    • capitalize() 首字母(第一个单词)大写,其余变小写

      1. s1 = 'I LIVE YOU'
      2. print(s1.capitalize())
      3. >>>I live you
    • title() 每个单词的首字母大写。(以特殊字符(非字母)隔开的即为一个单词)

      1. s1 = 'I LIVE YOU'
      2. print(s1.title())
      3. >>>I Live You
    • swapcase() 大小写反转

      1. s1 = 'I love YOU'
      2. print(s1.swapcase())
      3. >>>i LOVE you
    • center() 居中,有1个必选参数:宽度,一个非必选参数:填充)

      1. s1 = 'I'
      2. print(s1.center(10,'%'))
      3. >>>%%%%I%%%%%
    • find() 通过元素找索引,找到第一个就返回,找不到返回-1。

      1. s1 = 'I love you'
      2. print(s1.find('o'))
      3. >>>3
    • index() 通过元素找索引,找到第一个就返回,找不到就报错。

  • tuple

    • 特殊性:元祖中只有一个元素,并且没有’,‘,则它不是元祖,它与括号中的数据类型一致

      1. tu0 = (1,2)
      2. print(tu0,type(tu0))
      3. >>>(1, 2) <class 'tuple'>
      4. tu1 = (1)
      5. print(tu1,type(tu1))
      6. >>>1 <class 'int'>
      7. tu2 = ([1])
      8. print(tu2,type(tu2))
      9. >>>[1] <class 'list'>
      10. tu3 = (1,)
      11. print(tu3,type(tu3))
      12. >>>(1, ) <class 'tuple'>
    • count() 计数

      1. tu = (1,2,3,3,3,3)
      2. print(tu.count())
      3. >>>4
    • index() 找索引

      1. tu = ['a','b','a']
      2. print(tu.index('a'))
      3. >>>0
  • list

    • index() 通过元素找索引

      1. l1 = ['a','b','a']
      2. print(l1.index('a'))
      3. >>>0
    • sort() 默认从小到大排序,设置reverse参数则可从小到大

      1. l1 = [3,2,1,4]
      2. l1.sort()
      3. print(l1)
      4. >>>[1,2,3,4]
      5. l1.sort(reverse=True)
      6. print(l1)
      7. >>>[4,3,2,1]
    • reverse() 反转

      1. l1 = [2,1,3,0]
      2. l1.reverse()
      3. print(l1)
      4. >>>[0,3,1,2]
    • 列表相加 (3.4以上版本)

      1. l1 = [1,2,3]
      2. l2 = [3,4,5]
      3. print(l1+l2)
      4. >>>[1, 2, 3, 3, 4, 5]
    • 列表与数字相乘 (3.4以上版本)

      1. l1 = [2,'a',[1,'b']]
      2. l2 = l1*3
      3. print(l2)
      4. >>>[2, 'a', [1, 'b'], 2, 'a', [1, 'b'], 2, 'a', [1, 'b']]
    • 列表的特殊性:正向循环一个列表时如果删除某个元素,那么这个元素后面的所有元素都会向前进一位,它们的索引相比之前也会前进一位,因此,在循环一个列表时的过程中,如果要改变列表的大小(增加值或者删除值),那么结果很可能会出错或者报错。

      1. l1 = [1,2,3,4,5,6] #删除列表中索引位为偶数的元素。
      2. for i in range(0,len(l1),2):
      3. l1.pop(i)
      4. print(l1)
      5. >>>IndexError: pop index out of range
      • 解决此问题有三种方式

        1.直接删除 (按照元素删除,按照索引删除,切片加步长

        1. #切片加步长
        2. l1 = [1,2,3,4,5,6]
        3. del l1[1::2]
        4. print(l1)

        2.倒叙删除

        1. l1 = [1,2,3,4,5,6]
        2. for i in range(len(l1)-1,-1,-2):
        3. l1.pop(i)
        4. print(l1)
        5. >>>[1,3,5]
        6. #不能用以下代码;请自测
        7. l1 = [1,2,3,4,5,6]
        8. for i in range(1,len(l1),2):
        9. l1.pop(-i)

        3.思维转换

        1. l1 = [1,2,3,4,5,6]
        2. l2 = []
        3. for i in range(0,len(l1),2):
        4. l2.append(l1[i])
        5. l1 = l2
        6. print(l1)
  • dict

    • popitem 3.5版本之前,随机删除,3.6版本之后,删除最后一个,有返回值。 请自测。

    • update

      1. dic0 = {1:'i'}
      2. dic0.update(2='love',hobby='python') #增加键值对
      3. print(dic0)
      4. >>>{1: 'i', 2: 'love', 'hobby': 'python'}
      5. dic0.update(1 = '太阳') #改键值对
      6. print(dic0)
      7. >>>{1: '太阳', 2: 'love', 'hobby': 'python'}
      8. dic1 = {}
      9. dic1.update([(1,'a'),(2,'b'),(3,'c')])
      10. print(dic1)
      11. >>>{1: 'a', 2: 'b', 3: 'c'}
      12. dic0.update(dic1)
      13. print(dic0) #有则覆盖,无则增加
      14. >>>{1: 'a', 2: 'b', 'hobby': 'python', 3: 'c'}
      15. print(dic1)
      16. >>>{1: 'a', 2: 'b', 3: 'c'}
    • fromkeys() 第一个参数必须为可迭代对象,可迭代的对象共用第二个参数(id相同)。

      1. dic = dict.fromkeys('abc',1)
      2. print(dic)
      3. >>>{'a': 1, 'b': 1, 'c': 1}
      4. dic = dict.fromkeys([1,2,3],[])
      5. print(dic)
      6. >>>{1: [], 2: [], 3: []}
      7. dic[1].append('a')
      8. print(dic)
      9. >>>{1: ['a'], 2: ['a'], 3: ['a']}
    • 小题试做:(循环一个字典时,若果改变字典的大小则或报错。)

      1. #将字典dic中的以‘k’开头的键值对删除
      2. dic = {'k1':'a','k2':'b','k3':'c','a':'d'}
      3. l1 = []
      4. for key in dic:
      5. if key.startswith('k'):
      6. l1.append(key)
      7. for i in l1:
      8. dic.pop(i)
      9. print(dic)
      10. >>>{'a':'d'}
      11. #改进
      12. for key in list(dic.keys()): #将其转换为一个列表,若不加list则回报错。
      13. if 'k' in key:
      14. dic.pop(key)
      15. print(dic)
      16. >>>{'a','d'}
  • 数据之间类型的转换:

    • int bool str 三者转换

    • str list 两者转换

    • list set 两者转换

    • str bytes 两者转换

    • 所有数据都可以转换成bool值:

      转换成bool值为False的数据类型有:

      1. '',0,(),{},[],set(),None
  • 基础数据结构类型的总结

    • 按照储存空间的占用分(从低到高)

      • int
      • str
      • set : 无序
      • tuple: 有序,不可变
      • list: 有序,可变
      • dict: 有序(3.6版本之后),可变
  • 编码的进阶:

    • 不同的编码方式之间不能相互识别

    • 数据在内存中全部是以Unicode编码的,但是当数据用于网络传输或者存储到硬盘中,必须是以非Unicode编码(utf-8、gbk等)

    • python中的数据从内存(Unicode编码)存储到硬盘或进行网络传输时要经历一个特殊的转化过程,要转化为一个非Unicode编码类型的特殊数据才能进行传输或储存至硬盘,即bytes类型(内存中的编码方式:非Unicode) 内存中的数据(int,bool,list,dict,set,tuple)都不能直接转换为bytes类型,是先自动转换为字符串(Unicode编码)类型,再转换为bytes类型。

      • bytes与str的操作方式大部分都是一样的
      • bytes can only contain ASCII literal characters,手动将中文字符串转化为bytes类型会报错,要经过特殊的转化
      1. #str转bytes:
      2. a = b'iloveyou'
      3. print(a,type(a))
      4. >>>b'iloveyou' <class 'bytes'>
      5. #将中文转化为bytes类型:
      6. b = b'山就在那儿'
      7. print(b)
      8. >>>SyntaxError: bytes can only contain ASCII literal characters
      9. #正确方法为:
      10. c = '山就在那儿'
      11. b = c.encode('utf-8')
      12. print(b) #or print(c.encode('utf-8')) #一般指定utf-8的编码形式, (encode:编码)
      13. >>>b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
      • bytes可转化为字符串类型(Unicode)(decode,解码)。用什么编码类型转换为bytes数据类型的就用什么解码。

        1. b = b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
        2. c = b.decode('utf-8') or print(b.decode('utf-8'))
        3. print(c)
        4. >>>山就在那儿
        5. #用什么编码类型转换为bytes数据类型的就用什么解码。
        6. b = b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
        7. c = b.decode('gbk')
        8. print(c)
        9. >>>UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 14: incomplete multibyte sequence
  • 小题试做:gbk转换为utf-8

    1. #分析,所有的编码都与Unicode有关(计算机内存中以Unicode编码),因此可先将gbk转换为Unicode编码,再转换为utf-8编码。
    2. gbk = b'\xc9\xbd\xbe\xcd\xd4\xda\xc4\xc7\xb6\xf9'
    3. decode1 = gbk.decode('gbk') #解码为Unicode编码的字符串,可print(decode1)查看。
    4. print(decode1.encode('utf-8')) #以utf-8编码
    5. >>>b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'

python基础学习day7的更多相关文章

  1. Python基础学习Day7 基础数据类型的扩展 集合 深浅copy

    一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...

  2. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  3. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  4. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

  5. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  6. (一)python基础学习

    根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...

  7. python基础学习(起步)

    目录 python基础学习(起步) 变量 常量 变量的内存管理 python垃圾回收机制 变量的其他赋值方式 今日编程小题 本人能力有限,若有偏颇之处请读者大大不吝赐教! 祝大家每天都在成长! pyt ...

  8. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  9. Python基础学习一

    Python基础学习一 1.变量与常量 变量名:大小写英文.数字.下划线的组合,数字不能开头 常量名:习惯上常量用大写字母命名,例如"PI" 2.多行输出 转义符:反斜杠(),如果 ...

随机推荐

  1. Shell 快速入门(十八):特殊符号的使用

    在 Shell 语言中,经常会看到中括号和括号组成的特殊标识,例如:[].[[]].(()).$(()).().这些符号经常使我们非常迷惑,弄清楚它们之间的作用和区别非常必要. 在开始之前,我们先来学 ...

  2. 使json或字典输出更美观

    这里是选取的项目中部分代码,但是关于json或字典格式化输出的代码是完整的def send_post(url, data): 使用json.dumps()后数据被转成了str类型,如果还要对该数据像字 ...

  3. SpringMVC在使用过程中的错误

    HTTP Status 500 - Request processing failed; nested exception is org.springframework.validation.Bind ...

  4. 通过virt-manager给Windowsxp系统配置virtio驱动

    在虚拟机的detail上添加一个硬件设备. 下载virtio.iso文件,我使用的版本126,具体的virtio驱动放到了10.2上的itest的目录中,使用可以找. 在配置中,添加virtio硬盘. ...

  5. (一)mybatis简易搭建

    mybatis(基础及其搭建) 声明:该文章及该分类中的内容均基于正在开发的项目和一本参考书(深入浅出MyBatis技术原理与实战    by 杨开振) 一.mybatis核心组件(简要介绍) Sql ...

  6. zepto.js和jquery.js函数比较有什么优点?

    1.Zepto.js 是专门为现代智能手机浏览器退出的 Javascript 框架, 拥有和jQuery相似的语法, 但是和jQuery相比下来, 他有很多优点, 大小方面 , 压缩后的 zepto. ...

  7. SpringMVC_Day01

    项目结构 //SpringMVC配置文件 <?xml version="1.0" encoding="UTF-8"?> <!-- spring ...

  8. 5种方法获取url中文件的扩展名

    /** * strrchr - 查找指定字符在字符串中的最后一次出现 * strrpos — 计算指定字符串在目标字符串中最后一次出现的位置 * end — 将数组的内部指针指向最后一个单元 * pa ...

  9. 一道二叉树题的n步优化——LeetCode98validate binary search tree(草稿)

    树的题目,往往可以用到三种遍历.以及递归,因为其结构上天然地可以往深处递归,且判断条件也往往不复杂(左右子树都是空的). LeetCode 98题讲的是,判断一棵树是不是二叉搜索树. 题目中给的是标准 ...

  10. Python——8函数式编程①

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...