• 第四章 数据类型 --- 字符串、字节



    一、 字符串(str)

    定义:由一组字符组成的不可变序列

        变量名 = 字符串

            --- Python3中字符串默认以Unicode形式存储。

              >>>  Python2的 默认编码 是ASCII,不能识别中文字符,需要显式指定字符编码;

              >>>  Python3的 默认编码 为UTF-8,可以识别中文字符。

    >>> # Python2
    >>> import sys
    >>> sys.getdefaultencoding()
    'ascii'
     
    >>> # Python3
    >>> import sys
    >>> sys.getdefaultencoding()
    'utf-8'

    1. 字符串的创建

    (1) 单引号
    (2) 双引号
    (3) 三引号
        # 单引号和双引号交替使用可以用来使用输出对方。
        ''' 代表按格式输出(包含换行),该格式不是注释,但是常用来当注释使用;


    2. 序列的转义

    (1) 对于单引号、双引号和反斜杠的转义,表示只是为了输出

    (2) , , 


    3. 字符串的操作(都是新建)

    (1) 运算符

        +(合并拼接)    *(重复拼接)    in(判断子串)     is(对象)     ==(内容)     

        > (从左往右,逐位判断ASCII码大小)

    (2) 索引
        格式: 字符串[index]
                    其中,index>0,代表从左往右,始于0
                               index<0,代表从右往左,始于-1
            > len() 返回对象元素长度
            > index 取值范围(-len, len-1),超出范围报错
            > 字符串是不可变类型,元素无法修改
    (3) 切片(获得一个区域中的多个元素)
    格式: 字符串[start=0: end=len: step=1]
            start --- 起始位置(包含该位置,<0代表从右往左)
            start --- 结束位置(不包含该位置)
            step  --- 步长(非零整数,<0代表从右往左,>1代表间隔取)


    #用法:
    >>> s = 'abcdefghijk'
    >>> s[:]	   # 整切片,不可变类型不新建,直接指向该字符串;
                       #         可变类型,新建浅拷贝对象
    >>> s[0: 4]
    >>> s[0: 4:-1] # step为负数,start要大于end



    4. 字符串的相关方法

    (1) count(sep, start, end)
                > 计数,返回sep在字符串中出现的次数
                > start, end可以省略
    (2) index(sep, start, end)
             - 查找sep是否在字符串中,默认返回从左往右第一次出现的的位置
                > 如果sep也是一个字符串,那么返回子串重合位置的第一个字符位置
                > end可以省略
                > 找不到报错
    (3) find 
            - 功能同index,如果找不到返回-1。
                >  rfind,rindex 代表从右侧开始找,返回从左往右的序列号。
    (4) format
            - 格式化输出
    (5) join
            - 格式: str.join(iterable)
    使用当前str对可迭代对象进行填充,返回字符串
    用途:常用来把其他可迭代对象转成字符串

    print(''.join([1,2,3,4])) --- '1234'

    >>> a = ['2','e','3e3']
    >>> ''.join(a)
    '2e3e3'
    (6) replace(old, new, count(最大替换次数))
            # 注意,replace是新创建字符串
    (7) strip(chars)
             - 去掉两端的字符,
                > 默认去掉两端的空格
                > 如果有传入参数,那么逐一比较chars中的元素,从字符串两端逐一比对去除
                > lstrip rstrip 代表从两端去除,不去空格
    (8) split(sep, count)
                > 如果不传入参数,按照空格切割,并且去掉所有无用空格
                > 如果传入参数空格' ',那么不会去除多余中间空格和首尾空格

                > sep位于首尾,会多出''

    >>> a = ' asd 32e  23e 9'
    >>> a.split()                        # 不传入参数,按照空格切割,去掉多余空字符串
    ['asd', '32e', '23e', '9']
    >>> a.split(' ')                     # 传入参数' ',按照空格切割,空格转成空在字符串,不去掉多余空字符串
    ['', 'asd', '32e', '', '23e', '9']
    >>> a.split('9')                     # split点位于边界,会多切出空字符串''
    [' asd 32e  23e ', '']
    >>> a.split('gggg')                  # 如果不所在sep,那么实际上是把字符串转化成了列表
    [' asd 32e  23e 9']
    (9) startwith(profix, start, end)
         -  判断是否以profix开头,返回布尔类型
            profix 开头位置
            start 起始位置
            end 结束位置
    (10)endswith(profix, start, end)
        - 判断是否以指定字符结尾
    (11)upper() lower()
        - 转换成大写或者小写
    (12)capitalize()
        - 首字母大写,空格不会断开
    (13)partition(sep)
        -返回元组,包含三个元素,(sep前内容, sep, sep后内容)
            > 如果不存在该元素,返回 ('原串',  '',  '')
    (14)isalpha()
        - 判断字符
    (15)isdigit()
        - 判断数字 - 所有数字
    (16)isdecimal()

        - isdigital, isdecimal, isnumerical区别见我的另一篇博客:

    (17)isidentifier()

        - 判断是否合法标识符(不包括关键字,关键字也会认为合法)
    (18)islower(), isupper(), isspace()
        - 判断全部大写、小写、空格
    (19)center(width, fillchr)
            > fillchr 必须是单个字符

            > 向两端填充,奇数右填,偶数左填

    >>> for i in range(1,11):
    ...     print((i*'* ').center(30, ' '))
    ... 
                  *               
                 * *              
                * * *             
               * * * *            
              * * * * *           
             * * * * * *          
            * * * * * * *         
           * * * * * * * *        
          * * * * * * * * *       
         * * * * * * * * * *  
    >>> for i in range(1,21,2):
    ...     print((i*'*').center(20, ' '))
    ... 
             *          
            ***         
           *****        
          *******       
         *********      
        ***********     
       *************    
      ***************   
     *****************  
    ******************* 


    • 一个map方法处理字符串的方法:
    # 输入一个正整数,输出该数值的百位,十位与个位。考虑再多一位呢?
    def que4():
        def split_num1(n):
            long = len(str(n))
            num_list = []
            # 也可以把n先reverse,range从小到大取值
            for i in range(long-1, -1, -1):
                num_list.append(n // (10**(i)))
                n %= 10 ** (i)
            return num_list
    
        def split_num3(n):
            num_list = []
            for i in reversed(range(len(str(n)))):
                num_list.append(n // 10**i % 10)
            return  num_list
    
        def split_num2(n):
            # map(fun, liter),返回新的liter
            li = list(map(int, str(n)))
            return li
    
        number = int(input('请输入一个整数:'))
        nst = int(input('你想知道这个数的第几位:'))
        print('使用map方法:
    {}'.format(split_num1(number)))
        print('{}的第{}位数是:{}'.format(number, nst, split_num1(number)[::-1][nst-1]), end='
    ------------------------
    ')
        print('使用//%方法1:
    {}'.format(split_num2(number)))
        print('{}的第{}位数是:{}'.format(number, nst, split_num2(number)[::-1][nst-1]), end='
    ------------------------
    ')
        print('使用//%方法2:
    {}'.format(split_num3(number)))
        print('{}的第{}位数是:{}'.format(number, nst, split_num3(number)[::-1][nst - 1]))
    que()

    运行结果:

    请输入一个整数:43256456357
    你想知道这个数的第几位:4
    使用map方法:
    [4, 3, 2, 5, 6, 4, 5, 6, 3, 5, 7]
    43256456357的第4位数是:6
    ------------------------
    使用//%方法1:
    [4, 3, 2, 5, 6, 4, 5, 6, 3, 5, 7]
    43256456357的第4位数是:6
    ------------------------
    使用//%方法2:
    [4, 3, 2, 5, 6, 4, 5, 6, 3, 5, 7]
    43256456357的第4位数是:6


    二、字节(Bytes)

          ---  > 由一些单字符组成的序列,其中;
                > 每个字符都由ASCII码的形式存储,占据8个数据位,共有[0-255]共256个,包含数字、英文和一些符号
                > 是不可变类·

    1. 字节的创建

            --- 在类似字符串,在前面加一个,如:b'3ds' ;
                > 需要注意字节内容必须是ASCII码所包含的内容,否则报错

    2. 字节的操作

            --- 同字符串
            (1) 运算符 

                    +(合并拼接)  *(重复拼接)  n(判断子串)  is(对象)  ==(内容)   

                    > (从左往右,逐位判断ASCII码大小)

            (2) 索引
                    --- 需要注意,访问字节元素,如索引和遍历,得到的是ASCII码
            (3) 切片
            (4) 遍历

    	>>> a = b'8hy87h'
    	# 索引,返回ASCII码
    	>>> a[1]
    	104
    	>>> ord('h')
    	104
    	# 切片
    	>>> a[2:4]
    	b'y8'
    	# 遍历,返回ASCII码
    	>>> for i in a:
    	...     print(i, end = '	')
    	... 
    	56	104	121	56	55	104	>>> 

    3. 字节的方法

    --- 同字符串

  • 相关阅读:
    codevs 2833 奇怪的梦境
    codevs 3058 寻找sb5
    codevs 2989 寻找somebody
    并查集
    排列组合
    序章
    [POJ2625][UVA10288]Coupons
    2017NOIP模拟赛-科普基地
    AIM Tech Round 5 (rated, Div. 1 + Div. 2)
    浙江十套
  • 原文地址:https://www.cnblogs.com/geoffreyone/p/9899770.html
Copyright © 2020-2023  润新知