day8-字符串

总结

1. 字符串和字符

  • 什么是字符串

    字符串是容器型数据类型(序列), 将单引号或者双引号或者3个单引号或者3个双引号作为容器标志, 里面每个独立的符号就是字符串的一个元素

    字符串是不可变的(不支持增删改), 字符串是有序的(支持下标操作)

    字符串的元素:引号里面的每个符号都是字符串的元素,字符串的元素又叫字符.字符分为两种:普通字符和转义字符

    # 1.空串
    empty1 = ''
    empty2 = ""
    empty3 = ''''''
    empty4 = """"""
    print(type(empty1), len(empty1))  # <class 'str'> 0
    print(type(empty2), len(empty2))  # <class 'str'> 0
    print(type(empty3), len(empty3))  # <class 'str'> 0
    print(type(empty4), len(empty4))  # <class 'str'> 0
    # 2.字符串的容器标志
    #''和""没有区别, '''''''和"""""""没有区别
    # ''和""里面的内容不能通过直接按回车换行,只能通过转义字符换行; ''''''和""""""里面的内容可以通过回车直接换行
    
  • 字符串的元素 - 字符

    1. 普通字符 - 在字符串中表示符号本身的字符

    2. 转义字符 - 使用\和其他符号一起来表示特殊功能和意义的字符

      常用的转义字符: \n(换行), \t(水平制表符), \’(表示一个普通的单引号), \"(表示一个普通的双引号),

      \\ (表示一个普通的反斜杠)

    3. 阻止转义 - 让字符串中所有的转义字符功能消失(让一个字符串中每一个符号都表示符号本身), 在字符串前加r/R: r’’, R’’

    4. 转义字符 - 编码字符

    str1 = 'abc\n123'
    print(str1)
    str2 = '\tabc123'
    print(str2)
    str3 = 'it\'s me'
    print(str3)
    str4 = "it's me"
    str5 = 'is "A"'
    str6 = 'C:user\name\next.txt'
    print(str6)
    str7 = 'C:user\\name\\next.txt'
    print(str7)
    str8 = r'C:user\name\next.txt'
    str9 = '\tabc\t123\'mn\"nn\\00'
    print(len(str9))
    str10 = 'abc\u4e40123'
    print(str10)
    
  • 编码值 - 字符编码

    1. 编码值 - 计算机在储存符号的时候其实存的是这个符号对应的固定数字,这个数字就是符号对应编码值

    2. 编码表 - 将字符和数字一一对应的表

      ASCII码表 - 总共有128个符号, 只有美国常用符号,不包括中文, 数字在字母的前面,大写字母在小 写字母前面(A-65, a-97), 大写字母和小写字母之间有间隙

      Unicode编码表(python) - Unicode编码表中包含ASCII码

      Unicode编码表: 包含了目前世界所有国家所有民族的所有语言符号(万国码)

      ​ 中文编码范围: 4e00 ~ 9fa5

2.计算机基础

  • 内存单位

    位(bit) - 计算机内存最小单位
    1字节(byte) = 8位(bit) - 程序申请内存的最小单位
    1Kb = 1024字节
    1Mb = 1024Kb
    1G = 1024Mb
    1T = 1024G

  • 进制

    计算机中数字常见进制有4种: 2进制, 8进制, 10进制, 16进制

    1. 十进制

      基数: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
      进位: 逢十进一
      位权: 10**(N-1)
      表达方式: 直接写

    2. 二进制

      基数: 0, 1
      进位: 逢二进一
      位权: 2**(N-1)
      表达方式: 加前缀0b/0B

    3. 八进制

      基数: 0, 1, 2, 3, 4, 5, 6, 7
      进位: 逢八进一
      位权: 8**(N-1)
      表达方式: 加前缀0o/0O

    4. 十六进制

      基数: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a/A, b/B, c/C, d/D, e/E, f/F
      进位: 逢十六进一
      位权: 16**(N-1) 1f = f16**0 + 116**1 = f + 16 = 15 + 16 = 31
      表达方式: 加前缀0x/0X

3. 字符串相关操作

    1. 字符串获取字符和列表获取元素的语法一样

    一个空格是一个字符

    message = 'you see see one day day!'
    print(message[2])   # u
    print(message[4])   # s
    print(message[-1])  # !
    print(message[1:5]) # ou s
    print(message[:-5:-1]) # !yad
    
    1. 一个转义字符是一个字符,长度是1
    tr1 = '\tabc\u4fa9 123'
    print(str1[6])  # 1
    for x in 'ab\u67afc':
        print(x)  # a b 枯 c
    
  • 运算符

    1. 字符串1 + 字符串2 - 将两个字符串拼接产生一个新字符串
    print('abc' + '123' )  # abc123
    
    1. 字符串 * N - 将字符串重复N次产生一个新的字符串
    print('abc' * 3)       # abcabcabc
    print('abc' == 'acb')  # False
    print('a' == '\u0061') # True
    
    1. 比较大小: >, <, >=, <=. 两个字符串比较大小比较的是第一对不相等的字符编码值的大小

      是否是数字字符: ‘0’ <= char <= ‘9’

      是否是小写字母: ‘a’ <= char <= ‘z’

      是否是大写字母: ‘A’ <= char <= ‘Z’

      是否是字母: ‘a’ <= char <= ‘z’ or ‘A’ <= char <= ‘Z’

      是否是中文: ‘\u4e00’ <= char <= ‘\u9fa5’

    print('abc' > 'cd')  # False
    

    练习: 提取一个字符串中所有的数字字符

    str1 = 'sh函数78sk--2o'
    new_str = ''
    for x in str1:
        if '0' <= x <= '9':
            new_str += x
    print(new_str)
    

    练习: 提取中文

    # 方法一
    str2 = 'sh函数78sk--好2o'
    new_str1 = ''
    for x in str2:
        if '\u4e00' <= x <= '\u9fa5':
            new_str1 += x
    print(new_str1)
    # 方法二
    result = ''.join([x for x in str2 if '\u4e00' <= x <= '\u9fa5'])
    print(result)
    
  • in 和 not in

    字符串1 in 字符串2 - 判断字符串2中是否包含字符串1(判断字符串1是否是字符串2的子串)

    print('abc' in 'a1b2c3')   # False
    print('abc' in 'abc123')   # True
    print('1' in 'abc123')     # True
    
  • 相关函数:len, str

    1. str(数据) - 将数据转换成字符串(任何类型的数据都可以转换成字符串, 转换的时候直接在数据的打印值外面加引号)
    print(str(100))  # '100'
    list1 = [1, 2, 3]
    print(str(list1))  # '[1, 2, 3]'
    dict1 = {'name': '小明', 'age': '18'}
    print(str(dict1)) # "{'name': '小明', 'age': '18'}"
    

4. 字符串相关方法

  • join

    字符串.join(序列) - 将字序列中的元素使用指定字符串连接产生一个新的字符串. 序列中的元素必须是字符串

    names = ['小明', '张三', '李四']
    result = ''.join(names)
    print(result)  # 小明张三李四
    result = '+'.join(names)
    print(result)  # 小明+张三+李四
    
    message = 'abc'
    print('.'.join(message))  # a.b.c
    
    num = [10, 9, 78, 67]
    result = ''.join([str(x) for x in num])
    print(result)   # 1097867
    
    list1 = ['name', 23, True, '你好', '哈哈']
    result = '+'.join([x for x in list1 if type(x) == str])
    print(result)   # name+你好+哈哈
    
  • split

    字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割

    字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点进行切割

    str1 = 'how are you? i am fine, thank you! and you?'
    result = str1.split(' ')
    print(result)  # ['how', 'are', 'you?', 'i', 'am', 'fine,', 'thank', 'you!', 'and', 'you?']
    result = str1.split('you')
    print(result)  # ['how are ', '? i am fine, thank ', '! and ', '?']
    
    print('abca123amna'.split('a'))  # ['', 'bc', '123', 'mn', '']
    
    str2 = 'abc12mn12xy12==12++'
    print(str2.split('12', 2))   # ['abc', 'mn', 'xy12==12++']
    
  • replace

    字符串1.replace(字符串2, 字符串3) - 将字符串1中所有字符串2都替换成字符串3

    字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2替换成字符串3

    str1 = 'how are you? i am fine, thank you! and you?'
    result = str1.replace('you', 'me')
    print(result)  # how are me? i am fine, thank me! and me?
    result = str1.replace('you', 'me', 1)
    print(result)  # how are me? i am fine, thank you! and you?
    
上一篇:C++常见面试题 | Day8


下一篇:C#XML序列化类型的IXmlSerializable