一、字符串

作用:传递信息

字符串表达方式:使用单引号、双引号引起来的一串符号叫字符串

'', "", '''''', """"""

字符串的性质

1.字符串是有序的(下标、切片)
2.字符串是不可变(没有增删改)
3.字符串的容器符号’‘,“”,’‘’‘’',“”“”“”;类型:str
4.字符串分类:普通字符串、转义字符、原始字符串

(一)转义字符

有特殊含义的符号

原来转义字符规定:使用 \ + 数字,表示有特殊意义的符号现在C语言规定:使用 \ + 特定符号,表示有特殊意义的符号

通过示例来理解:

print('ab\tc\nd')
print("ab'cd")

运行结果为:
ab	c
d
ab'cd

\ + 指定符号可以使有特殊含义的符号变成其本身,可以让没有特殊含义的符号变得有特殊意义

通过示例来理解:

print('ab\'cd')
print('ab\\tcd')

运行结果为:
ab'cd
ab\tcd
(二)原始字符

在字符串前边添加r或者R,能够将字符串中的转义字符变成其本身

一个转义字符长度始终为1,添加了原始字符串的转义字符长度为2

通过示例来理解:

print('12\t34')
print(r'12\t34')
print(len(r'\t'), len('\t'))

运行结果:
12	34
12\t34
2 1

二、字符串的运算

(一)字符串的拼接

得到的是新的字符串对象

通过示例来理解:

print('ab' + 'cd')

运行的结果是:
abcd
(二)字符串的重复

直接在字符串之后添加*XX

通过示例来理解:

print('*' * 20)
(三)字符串比较大小

注意

比较第一对不相同元素的大小

python使用的编码表是ASCII码表的拓展表Unicode编码表(万国码)

通过示例来理解:

# 此处比较a、c
print('ab' > 'c')
# 此处比较。、c
print('ab。' > 'abc')

结果用布尔值表示

(四)chr() 、ord()

chr() —>能够将进制转换成对应的符号
ord() —>能够将符号转换成十进制

需要记住的范围值:

0-9对应范围:48-57
A-Z对应范围:65-90
a-z对应范围:97-122
所有的中文:\u4e00-\u9fa5(19968-40869)

通过示例来理解:

print(ord('。'))
print(chr(12290))

print(ord('\u4e00'), ord('\u9fa5'))
for i in range(19968, 40870):
    print(chr(i), end='')
for i in range(4352, 4608):
    print(chr(i), end='')
(五)字符串的成员运算:in、not in
print('a' in 'abcd')

二进制:0、1
A:二进制:0b01000001,十进制:65,十六进制:0x41,八进制:0o101

print(chr(0b01000001), chr(65), chr(0x41),chr(0o101))

hex() --将进制转换为十六进制
oct() --讲进制转换为八进制

print(hex(65))
print(oct(65))

三、下标和切片

1.下标:要注意手动换行 \n,长度为1

通过示例来理解:

str1 = """
从前有座山,
山里有座庙,
庙里有个老和尚
老和尚对小和尚说
"""
# 获取第一个“山”,下标为5,因为第一行手动换行 \n占一个
print(str1[5])
# “说”的下标
print(str1[-2])
2.切片

1.将“从前有座山”取出
2.将“庙有老”
3.将”庙座有里山"

print(str1[1:6])
print(str1[15:20:2])
print(str1[12:7:-1])

一个小技巧:选中需要的片段,界面底部会显示选中片段的长度

3.换行

一行完整的内容如何换行?

通过示例来理解:

num = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 \
      + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
print(num)
运行结果为:90

注意:不要拆分一个数字整体

str2 = 'sgewifewzc' \
       'skoeuhwo'
print(str2)
运行结果为:
sgewifewzcskoeuhwo

四、字符串的遍历

前面讲解列表的时候也讲过遍历,与列表类似

(一)直接遍历
str1 = '王者荣耀'
for i in str1:
    print(i)
(二)间接遍历
str1 = '王者荣耀'
for i in range(len(str1)):
    print(str1[i])

通过一些练习来具体理解与应用:

  1. 获取"王"、“荣”
str1 = '王者荣耀'
for i in range(0, len(str1), 2):
    print(str1[i])
  1. “abcderf” --> “ABCDERF”
str2 = 'abcderf'
str3 = ''
for i in str2:
    m = ord(i)
    n = chr(m - 32)
    str3 += n
print(str3)
  1. 练习:‘abcdABCD一二三四’ -->‘ABCDabcd一二三四’
str4 = 'abcdABCD一二三四'
str5 = ''
for i in str4:
    if 'a' <= i <= 'z':
        str5 += chr(ord(i) - 32)
    elif 'A' <= i <= 'Z':
        str5 += chr(ord(i) + 32)
    else:
        str5 += i
print(str5)

五、字符串的方法和函数

(一)upper()

小写字母转大写字母,自动识别小写字母

print('abcAALEJNF。'.upper())
(二)lower()

大写字母转小写字母

print('abcAALEJNF。'.lower())
(三)capitalize()

将字符串中首字母转大写,必须是以字母开头的字符串

(四)title()

将字符串中所有连续英文字母的子串首字母大写

capitalize()和title()对比

print('shwoeufwxn;.,sdje'.capitalize())
print('shwoeufwxn;.,sdje'.title())

运行结果显示:
Shwoeufwxn;.,sdje
Shwoeufwxn;.,Sdje
(五)split()

切割,以指定符号为切割点,将切割点左右的字符串分开并保存到列表中

通过示例来理解:

result1 = '1, 2, 3,'.split(',')
print(result1)
print('3' + '' == '3')

运行结果显示:
['1', ' 2', ' 3', '']
True

, 两边必须分割,若 , 一边没有字符串,会有一个空字符,没有长度

(六)join()

将一个所有元素均为字符串的序列(容器)中的所有元素拼接起来

容器中必须全部为字符串

result1 = '1, 2, 3,'.split(',')
result2 = ','.join(result1)
print(result2)

运行结果显示为:
1, 2, 3,
(七)strip()

默认去掉字符串头尾的空符号(空格、\n、\t等都是空符号),也可以指定去除的符号

通过示例具体理解:

str1 = '\nabc \t\n'
print('*' * 20)
print(str1)
print('*' * 20)
print(str1.strip())
print('*' * 20)
 # 指定去除 \n
print(str1.strip('\n'))
print('*' * 20)
# 指定去除 *
print('abc*'.strip('*'))

请运行程序仔细看结果,尤其是选中结果abc之后出现的空格

(八)replace()

replace(‘old_str’,‘new_old’)

替换,将一个字符串中的全部old_str替换成new_str

replace(‘old_str’,‘new_old’,‘次数’)

将一个字符串中指定数量的old_str替换成new_str

区别

str1 = ',1,2,3,'
print(str1.replace(',', ''))
print(str1.replace(',', '', 2))

运行结果显示:
123
12,3,

str1.replace(‘,’, ‘’, 2)消除了前两个 , 号

如何将停用词变为**

举例:“你可真是个菜狗”

python中有一个模块jieba(结巴)
例如:[‘你’, ‘可’, ‘真是’, ‘个’, ‘菜狗’]

现存一个词库(停用词):
例如:[‘小菜’, ‘菜狗’, ‘小菜狗’]

如果jieba分词之后的结果在停用词库中出现过,直接进行替换

str1 = "你可真是个菜狗"
list1 = ['你', '可', '真是', '个', '菜狗']
stop_words = ['小菜', '菜狗', '小菜狗']
str2 = ''
for i in list1:
    if i in stop_words:
        str2 += str1.replace(i, '*' * len(i))
        print(str2)