• Python基础


    一、编码

      Python从最初的支持ASCII编码到Unicode编码一直到现在的UTF-8编码。

      编码区别

        ASCII编码仅仅是考虑的英文和数字,编码长度一个字节。

        Unicode编码综合考虑的多种语言方式,编码长度一般为俩字节,但是却造成一定的空间浪费。例如英文用ASCII编码需要一个字节,而用Unicode编码需要俩字节,所以就造就了一定空间的浪费。但是也在一定程度上解决了乱码问题,统一的编码方式。(在Unicode出现早期,汉字用gb2312编码)

        UTF-8编码是对Unicode的进一步优化,采用动态分配存储空间,例如英文用一个字节编码,汉字用俩字节编码。UTF-8可以理解为包含了ASCIIUnicode的优点的编码方式。

    二、格式化

      在Python中,字符串格式化和C语言是一样的方式.

    >>> 'Hello, %s' % 'world'
    'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
    'Hi, Michael, you have $1000000.'

      %运算符就是用来格式化数据用的,%s代表格式化字符串,%d代表是格式化数字。有几个%?,后边对应几个字符串就行了。记得多个字符串格式化,后边字符串要顺序上对应上同时用括号包裹。如果仅仅只有一个字符串括号可以省略。

      常见占位符如下:

    %d    整数
    %f    浮点数
    %s    字符串
    %x    十六进制整数

      格式化整数和浮点数还可以指定是否补充0或者是小数点后边保留几位。

    >>> '%2d-%02d' % (3, 1)
    ' 3-01'
    >>> '%.2f' % 3.1415926
    '3.14'

      如果有时候你不知道格式化的数据的真实数据类型,那么%S可以转换任何数据为字符串类型。

    >>> 'Age: %s. Gender: %s' % (25, True)
    'Age: 25. Gender: True'

      如何转译%为普通字符(正常字符串中这直接使用%作为字符串没任何问题,但是在需要有格式化的字符串中如果包含了一个%你需要怎么做?)

    >>> 'growth rate: %d %%' % 7
    'growth rate: 7 %'

    三、集合

      List

        Python内置了一种数据类型列表:List,List是一种有序集合,可以完成添加和删除的功能。  

    >>> classmates = ['Michael', 'Bob', 'Tracy']
    >>> classmates
    ['Michael', 'Bob', 'Tracy']

        读取方式如下

    >>> classmates[0]
    'Michael'
    >>> classmates[1]
    'Bob'
    >>> classmates[2]
    'Tracy'

        PythonList的拥有反向读取数据的方式,例如-1读取则是从后向前数的第一个数据,也就是最后一个数据。

    如果要取最后一个元素,除了计算索引位置外,还可以用-1
    >>> classmates[-1] 'Tracy'

        List的添加删除和插入及修改值。

    >>> classmates.append('Adam')
    >>> classmates
    ['Michael', 'Bob', 'Tracy', 'Adam']
    
    >>> classmates.pop()
    'Adam'
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy']
    
    >>> classmates.pop(1)
    'Jack'
    >>> classmates
    ['Michael', 'Bob', 'Tracy']
    
    >>> classmates.insert(1, 'Jack')
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
    
    >>> classmates[1] = 'Sarah'
    >>> classmates
    ['Michael', 'Sarah', 'Tracy']

        批注:

          List中数据类型可以是任意类型,这个不同于Java中,在javaList要求在创建集合的时候声明这个集合存储的数据类型,一旦确认则只能存储这一种类型。

        PythonList中存储List

    >>> p = ['asp', 'php']
    >>> s = ['python', 'java', p, 'scheme']

        这里如果要获取对应的asp这个字符串,那么需要读取s[2][0],很显然整个List可以当做一个一维数组,二维数组,多维数组。

        读取列表长度方式如下

    >>> L = []
    >>> len(L)
    0

      Tuple<元组>

        有序列表元组Tuple,类似于List的数据存储。不同点在于一点定义初始化之后其内部数据对象是不允许修改,所以很显然Tuple不具备appendinsert以及pop等操作。

        声明和初始化对于List使用[],Tuple声明方式()。  

    >>> classmates = ('Michael', 'Bob', 'Tracy')

        Tuple功能决定其使用之前需要确定内容数据,因为一旦创建之后数据无法修改。<不允许修改的是Tuple指向的对象>

        可变的Tuple?????

    >>> t = ('a', 'b', ['A', 'B'])
    >>> t[2][0] = 'X'
    >>> t[2][1] = 'Y'
    >>> t
    ('a', 'b', ['X', 'Y'])

        不允许修改的仅仅是Tuple引用的对象,对于Tuple而言直接引用的是数组['A','B']对象,只要保证该数组对象不变<地址不变>,那么对于数组内部的东西他是不关注的,所以可以直接修改器数组内部数据,但是对于'a','b'而言是不允许被修改的。

      dict<字典缩写,其实就是key-value,对于key的实现通过hash算法>

        可以理解为字典<其实做过java的可以当做是map来理解它>,声明方式{key-value},不同在于内部值是以key-value的形式

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    >>> d['Michael']
    95

        对于dict的添加,删除,遍历

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    >>> d['Michael']
    95
    #添加
    >>> d['ArMn'] = '25'
    >>> d['ArMn']
    25
    #删除
    >>>d.pop('ArMn')
    >>>d
    {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    #遍历print前边需要加空格 否则会报错, IndentationError: expected an indented block
    >>> D = {'x':1, 'y':2, 'z':3} 
    >>> for key in D:  
        print key, '=>', D[key]   

       批注

        dict中的顺序和放入的先后顺序无关。

        Listdict比较:

          List存储占用空间少,但是随着数据的增加查询速度回越来越慢。

          dict存储占用空间大,但是随着数据的增加查询速度依然很快。

      set<集合>

        集合中的元素不允许重复<等同于java中的HashSet>,set可以看做是dict中的key的集合体,不允许有重复,并且不可变<不能是一个变量,而应该是一个固定值>,声明方式和元组的方式一样,使用括号()。

    >>> s = set([1, 2, 3])
    >>> s
    {1, 2, 3}

        上述代表在set中声明一个list对象,当然也可以添加其他的数据类型例如字符串

    >>> st = set('a')
    >>> st
    {'a'}
    >>> st = set(['a','b'])
    >>> st
    {'a', 'b'}

        添加数据给set,从真实的执行效果来看,其实内部是解析变量list然后addset

        对于元组而言也是一样,看如下执行结果

    >>> tupleSet = set(('a','b'))
    >>> tupleSet
    {'a', 'b'}

        集合转换

          set转换为tuple,如下

    >>> tup = (1,2,3,4)
    >>> tupSet = set(tup)
    >>> tupSet
    {1, 2, 3, 4}
    >>> tupCopy = tuple(tupSet)
    >>> tupCopy
    (1, 2, 3, 4)
    >>>

          set转换list,如下

    >>> slist = ['a','b','c']
    >>> sSet = set(slist)
    >>> sSet
    {'c', 'a', 'b'}
    >>> slistCopy = list(sSet)
    >>> slistCopy
    ['c', 'a', 'b']

           看到类似如上间转化再回头看下set的初始化传入参数有ListTuple是不是有点别的想法<ListsetTupleset转换!!!>

  • 相关阅读:
    写一个列表生成式,产生一个公差为11的等差数列
    如果对方网站反爬取,封IP了怎么办?
    为什么会选择redis数据库?
    你是否了解谷歌的无头浏览器?
    遇到的反爬虫策略以及解决方法?
    常见的HTTP方法有哪些?
    遇到反爬机制怎么处理?
    列举网络爬虫所用到的网络数据包,解析包?
    python中的关键字yield有什么作用?
    如下代码输出的是什么?
  • 原文地址:https://www.cnblogs.com/liemng/p/7727135.html
Copyright © 2020-2023  润新知