day06 字符串
一、字符串的定义
只留意原始字符串
-
字符串表达式: 使用单引号,双引号引起来的一串符号叫做字符串
-
性质 :
- 有序
- 其中单个元素不可变的,改变方式只能用另一个黏贴(易错)
- 容器类型:str
-
分类 :
-
普通字符
-
转义字符 : 有特殊含义的符号,长度始终为1
a. 结构:C语言规定,‘\’ + ‘特定符号’
b. 常用:\n,\t,\r(回车符,不常用),\ (反反斜杠,让其失效),如’ab\tcd’输出:‘ab\tcd’
c. \ 任何特殊字符,让其失效。如“ab’cd”,把单引号注释,正常输出 -
原始字符
a. 在字符串前面添加r 或 R,能够让字符串的转移字符变成其本身。原始字符串输出。
-
二、字符串的运算
只需留意字符串如何比较大小
-
字符串的拼接(得到是新的字符串对象)
-
字符串的重复 : print(‘-’ * 20)
-
字符串比较大小 :比较第一对不相同元素的编码值的大小 eg :‘ab’ > ‘c’ 返回:False
a. python使用的unicode万国码编码表,有中文对应的码值。ASCII码只有英文和英文符号。
b. chr() ——> 能够进制转化为对应的符号,print(chr(234))
ord() ——> 能够将符号转化为十进制的编码值,print(ord(‘。’))0-9 :48-57 A-Z :65-90 a-z :97-122 所有中文:\u4e00 -\u9fa5(19968-40869)
eg :print(ord(‘\u4e00’),ord(‘\u9fa5’))
for i in range(19968,40870):
print(chr(i)) -
字符串的成员运算 : in、not in
-
关于进制:
进制的输入格式是:
A:二进制:‘0b01000001’,十进制:65,十六进制:0x41
0b开头:代表二进制。无开头:代表十进制。0x开头:代表十六进制。0o:代表八进制
hex() - 将进制转化为十六进制
oct() - 将进制转化为八进制
三、字符串的循环(遍历)
注意自己键入的一个回车按键,代表一个字符,长度为一
方法同列表
# 例一:
str1 = '''
从前有座山,
山上有座庙,
庙里有个老和尚,
老和尚对小和尚说'''
print(str1[1:6])
print(str1[15:20:2])
print(str1[12:7:-1])
for i in range(len(str1),2):
print(i)
从前有座山
庙有老
庙座有上山
#例二、 大写字母转小写字母,小写字母转大写字母
str = 'abcdABCD一二三四'
str1 = ''
for i in str :
if 'a' <= i <= 'z' : # 直接使用‘a’和‘A’
str1 += chr(ord(i)-32)
elif 'A' <= i <= 'Z':
str1 += chr(ord(i)+32)
else :
str1 += i
print(str1)
ABCDabcd一二三四
四、字符串的BIF
1.大小写转换:
a. 小写字母转大写字母 :upper()
print(str1.upper())
b. 大写字母的小写字母 :lower()
c. 将字符串中首字母转大写(必须是以字母开头的字符串) : capitalize()
d. 将字符串中所有连续英文字母的子串首字母大写 (人工智障,不认识单词):title()
'ad123f345d' => 'Ad123F345D'
-
str1.split(切割字符) : 切割,以指定符号为切割点,将切割点左右的字符串分开保存在列表中
a. 特别注意:最后保留的形式是列表,且左右两边如果没有也会保存一个空字符
b. eg :result1 = ‘1,2,3,’.split(‘.’)
print(result1)=>[‘1’,‘2’,‘3’,‘’] #注意还有一个空字符串,左右两边都要保存
-
‘拼接字符’.join(容器) :将一个所有元素均为字符串的序列中的所有元素以指定符号拼接起来,拼接成字符串
a. 特别注意:必须所有元素都是字符串的列表才行!
b. eg :result2 = ‘,’.join([‘1’,‘2’,‘3’,‘’])
print(result2) -
strip() : 默认去掉字符串头尾的空字符串(空格,包括\n,\t),也可以去掉指定的字符串
str1 =‘\nabc \t\n’
str1.strip()str2 = ‘abc*’
print(str2.strip('')) #去掉首尾的号 -
replace() : 替换
a. 用法1 :replace(‘old_str’,‘new_str’) - 将一个字符串中全部的旧字符串替换成新的
b. 用法2 : replace(‘old_str’,‘new_str’,次数)- 替换指定次数
eg :
str1 = ‘,1,2,3,’
str1 = str1.replace(‘,’,‘’)str1 = str1.replace(‘,’ , ‘’ ,2)
#注意,对于字符串,无法使用关键字参数inplace=true,所以尽量赋值或者使用新的字符串
五、实例
- 获取列表中出现最多次数的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:[3]
例如:nums = [1, 2, 2, 3, 3] —> 打印:[2, 3]
# 方法一、使用两个列表,一个储存无重复数据,一个储存与第二个列表索引一一相对应的,该值的出现次数
nums = [1, 2, 3,1,4,2,1,3,7,3,3]
num = list(set(nums))
num_count =[]
for i in num :
num_count.append(nums.count(i))
for j in range(len(num_count)):
if num_count[j] == max(num_count) :
print(num[j])
# 方法二、使用中间变量count来卡if,最后输出多次数的值.循环中最容易忽略的就是在循环中使用中间变量
# 两个点:1.使用中间变量,来控制,删选出最大次数这个功能。(一个特别重要的思想:自我修正,一直把最大值赋给一个中间值,最后留下的(符合条件的)就会是最大的)
# 2.利用新列表,如果超过加入/替换,保持里面只有一个最大值
nums = [1, 2, 3,1,4,2,1,3,7,3,3]
num_max = []
count = 0
for i in nums:
if nums.count(i) > count :
count = nums.count(i)
num_max.clear()
num_max.append(i)
# 处理如果出现多个最大次数的情况,且要避免一个数字判断过,同样的数值的再次通过elif进入新列表
elif nums.count(num_max[0]) == nums.count(i) and i not in num_max :
num_max.append(i)
print(num_max)
- 王者荣耀屏蔽敏感词
str = '你可真是个垃圾'
# 句子拆解为主,谓,宾等部分,使用模块jieba(最好的中文分词模块),可以将字符串自动拆解成各个完整词意部分,进一个列表
str1 = '你可真是个垃圾'
list1 = ['你','可','真是','个','垃圾','']
stop_words = ['垃圾','菜鸡','辣鸡']
for i in list1 :
if i in stop_words:
str1 = str1.replace(i, '*'*len(i))
print(str1)
你可真是个**