IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> day9 字符串 -> 正文阅读

[Python知识库]day9 字符串

day9 字符串

1. 字符串

1.1 什么是字符串

字符串是容器型数据类型;将’’、""、’’’’’’、""""""作为容器的标识,里边直接是多个符号,每个符号就是字符串的一个元素:‘元素1元素2元素3…’

字符串不可变(不可增删改);

  • 所有看似可变的操作均是产生一个新字符串

字符串是有序的(支持下标操作);

元素 - 所有的符号都可以作为字符串的元素;字符串中的元素又叫字符。字符分普通字符和转义字符两种

  • python中只有字符,却没有字符对应的类型,与C语言不同
# 1)字符串的元素(字符)可以是任意符号
str1 = '上界sgngj,.:[]-*↓↑【】☆'
print(str1)
# 2) 空字符串   -   引号内什么都没有(有空格不是空字符串)
str2 = ''
str3 = ""
str4 = ''''''
str5 = """"""
print(type(str5), len(str5))  # <class 'str'> 0

注意:

多行注释的显示颜色与字符串相同,因为多行注释实质是字符串,只有放在特定位置的多行注释才是真正的字符串,内容不符合字符串要求会报错

不在特定位置的多行注释会参与编译,只是不保存它它编译后便会消失。

# 3) 多行字符串
# 双引号字符串可以随意换行
str1 = """
abc 
   123
===========
"""
print(str1)
# 单引号字符串不能随意换行
# str2 = 'ab  #报错
#        c'
# print(str2)
# 单引号字符串换行只能采用转义字符\n
str3 = 'ab\nc'
print(str3)
# 4)字符串是有序的
print('abs' == 'sba')  # False

1.2 字符串中的元素 - 字符

1.2.1 普通字符

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

1.2.2 转义字符

转义字符 - 在特定符号前加\表示特殊功能或者特殊意义的字符(各语言通用)

\n  -   换行
\t  -   水平制表符(相当于tab键)
\'  -   表示一个普通的单引号
\"  -   表示一个普通的双引号
\\  -   表示一个普通的反斜杠

注意:

转义字符的长度为1。

想要实现一般tab键的功能最好采用\t,因为\t的长度为1,而tab键的长度可能不一致。

str1 = 'abc\n123'
print(str1)
# abc
# 123

str1 = 'abc\t123'
print(str1)  # abc 123

# str1 = 'It's OK' # 报错
str1 = 'It\'s OK'
print(str1)  # It's OK
str1 = "It's OK"
print(str1)  # It's OK

str1 = "I say, \"good good study.\""
print(str1)  # I say, "good good study."
str1 = 'I say, "good good study."'
print(str1)  # I say, "good good study."

str1 = 'C:User\\name\小明'
print(str1)  # C:User\name\小明

# \u四位的16进制编码   -   字符编码
str1 = '\u4e00abc'
print(str1)  # 一abc

1.3 字符编码

  1. 计算机在存储数据时只能存数字(实质存的是数字对应的二进制的补码)

计算机存储图片,存的是每一个像素点的颜色(RGB值)

计算机存储视频,存的是每一帧图像的每个像素点的颜色(RGB值)

2)为了能够让计算机存储文字,给每个字符对应了一个固定数字,每次在存储这个字符的时候就存储这个字符对应的数字。

每个字符对应的数字就是这个字符的编码值

编码表 - 记录每一字符对应的编码值

1.3.1 常用字符编码

'0' -   48
'A' -   65
'a' -   97

1.4 编码表

编码表 - 记录字符和数字对应关系的表

常用的编码表:ASCII码表、Unicode编码表(Python)

Unicode编码表是ASCII码表的扩展版

1.4.1 ASCII码表

a.只记录了美国的符号(这里没有记录中文)

b.顺序(从前往后):数字字符(‘0’-48)、大写字母(‘A’-65)、小写字母(‘a’-97)。并且三类符号之间不连续。

'0' -   48
'A' -   65
'a' -   97

1.4.2 Unicode编码表

a.是ASCII码表的扩展(包含了ASCII码表),记录了世界上所有国家所有名族所有语言的符号

b.中文范围:4e00 ~ 9fa5 (共20901个)

'\u4e00'  # 一
'\u9fa5'  # 龥

1.5 编码值的使用

1.5.1 chr函数

chr(编码值) - 获取编码值对应的字符

print(chr(97))  # a
print(chr(0x4e00), chr(0x9fa5))  # 一 龥
# 练习:打印所有中文
num = 0
for x in range(0x4e00, 0x9fa5+1):
    num += 1
    print(chr(x), end=' ')
    if num == 30:
        print()
        num = 0

1.5.2 ord函数

ord(字符) - 获取字符编码值

print(ord('婷'))  # 23159

1.5.3 编码字符

\u四位的16进制编码值

print('a', '\u0061')  # a a
print('a\u0061')  # aa
# 判断一个字符是否为中文
c = '看'
if '\u4e00' <= c <= '\u9fa5':
    print('中文!')

2. 进制

2.1 十进制

基数:0 ~ 9

表示方法:直接写

转换函数:直接写

num = 1234567890

2.2 二进制

基数:0、1

表示方法:加前缀0b/0B

转换函数:bin(数据)

num = 0b101
print(num)  # 5 = 1*2o + 0*21 + 1*22

2.3 八进制

基数:0~7

表示方法:加前缀0o/0O

转换函数:oct(数据)

num = 0o23
print(num)  # 19 = 3*8o + 2*81

2.4 十六进制

基数:09,af(A~F)

表示方法:加前缀0x/0X

转换函数:hex(数据)

num = 0xaf2  # 2802 = 2*16o + 17*161 + 10*162
print(hex(100))  # 0x64
print(bin(100))  # 0b1100100
print(oct(100))  # 0o144

3. 字符串的相关操作和相关函数

3.1 查

查 - 获取字符

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

str1 = 'how are you? i am fine, and you?'
print(str1[2], str1[-1])  # w ?

注意:一个转义字符的长度是1

str1 = '\tabc\n123\u6afa'  # 123櫺
# print(str1)
print(str1[1], str1[-2])  # a 3
print(str1[1:6])  # abc\n1
print(str1[-1:2])  # '',步长和方向不一致,取不到值
print(str1[1:7:2])  # 'ac1'
print(str1[-1::-2])  # '-2\nb\t'
print(str1[2:])  # 'bc\n123\u6afa'

print('-------')
for x in str1:
    print(x)

3.2 +、*

1)两个字符串比较大小,比较的是第一对不相等字符的编码值大小

2)两个字符比较大小,比较的是字符的编码值的大小

3)应用:

已知字符X:

判断是否是数字字符:‘0’<= x <= ‘9’

判断是否是小写字母:‘a’<= x <= ‘z’

判断是否是大写字母:‘A’<= x <= ‘Z’

判断是否是字母:‘a’<= x <= ‘z’ or ‘A’<= x <= ‘Z’

判断是否是中文:’\u4e00’ <= x <= ‘\u9fa5’

print('abc' == 'acb')  # False
print('abc' > 'Abc123')  # True,编码值:a > A
print('你好' > 'hello')  # True
# 练习1:已知一个字符串,统计字符串中中文出现的次数
str1 = '-==sh是uM09K你好!'
count = 0
for string in str1:
    if '\u4e00' <= string <= '\u9fa5':
        count += 1
print('中文出现的次数:', count)  # 中文出现的次数: 3
# 练习2:判断指定字符串是否是纯数字字符串
# '234445'  -> 是   '122h2333' -> 不是
str1 = '234445'
str2 = '122h2333'
for string in str1:
    # if string < '0' or string > '9':
    if not '0' <= string <= '9':
        print('不是')
        break
else:
    print('是')
# 练习3: 提取字符串中所有的大写字母
# '-==sh是uM09K你好!'  -> 'MK'
str1 = '-==sh是uM09K你好!'
new_str = ''
for string in str1:
    if 'A' <= string <= 'Z':
        new_str += string
print(new_str)  # MK

3.4 in 和 not in

字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串

print(10 in [10, 20, 30])  # True
print([10, 20] in [10, 20, 30])  # False

print('a' in 'abc123')  # True
print('abc' in 'abc123')  # True
print('ac' in 'abc123')  # False

3.5 相关函数

3.5.1 len(字符串)

注意:一个转义字符长度为1

3.5.2 str(数据)

str(数据) - 将数据转换为字符串(任何数据都能转换为字符串;转换的时候是直接在数据的打印值外边加引号)

x = 23
str(23)  # '23'
str(12.5)  # '12.5'
str(True)  # 'True'
str([10, 20])  # '[10, 20]',逗号后边有空格(自动规范格式)
str({'a': 18, 'b': 32})  # "{'a':18,'b':32}",加的是双引号(自动规避单双引号引起的歧义)
print(str({'a': 18, 'b': 32}))

3.3 比较运算

1)两个字符串比较大小,比较的是第一对不相等字符的编码值大小

2)两个字符比较大小,比较的是字符的编码值的大小

3)应用

已知字符X:

判断是否是数字字符:‘0’<= x <= ‘9’

判断是否是小写字母:‘a’<= x <= ‘z’

判断是否是大写字母:‘A’<= x <= ‘Z’

判断是否是字母:‘a’<= x <= ‘z’ or ‘A’<= x <= ‘Z’

判断是否是中文:’\u4e00’ <= x <= ‘\u9fa5’

print('abc' == 'acb')  # False
print('abc' > 'Abc123')  # True,编码值:a > A
print('你好' > 'hello')  # True
# 练习:已知一个字符串,统计字符串中中文出现的次数
str1 = '-==sh是uM09K你好!'
count = 0
for string in str1:
    if '\u4e00'<= string<='\u9fa5':
        count += 1
print('中文出现的次数:', count)  # 中文出现的次数: 3
# 练习2:判断指定字符串是否是纯数字字符串
# '234445'  -> 是   '122h2333' -> 不是
str1 = '234445'
str2 = '122h2333'
for string in str1:
    # if string < '0' or string > '9':
    if not '0' <= string <= '9':
        print('不是')
        break
else:
    print('是')
# 练习3: 提取字符串中所有的大写字母
# '-==sh是uM09K你好!'  -> 'MK'
str1 = '-==sh是uM09K你好!'
new_str =''
for string in str1:
    if 'A' <= string <= 'Z':
        new_str += string
print(new_str)

4. r语法

在字符串的最前面加r或者R,可以让字符串中所有的转义字符的功能消失(每个符号都会变成普通字符)

  • 应用:路径前最好加r
str1 = r'c:\user\name\test\demo.py'
print(str1)  # c:\user\name\test\demo.py

5. 字符串格式化

# name = input('请输入姓名:')
# age = int(input('请输入年龄:'))
name = '小明'
age = 18

# message = 'xxx今年xx岁!'
# 方法一:
message = name + '今年' + str(age) + '岁!'
print(message)

# 方法二:
message = '%s今年%d岁!' % (name, age)
print(message)

# 方法三:
message = f'{name}今年{age}岁!'
print(message)

5.1 格式字符串

语法:包含格式占位符的字符串 % (数据1, 数据2, …)

格式占位符:(各门语言通用)

  • %s - 字符串占位符(python中,%s可以给任何类型的数据占位(任何数据都能转换为字符串),转化时会将数据转换为字符串)
  • %d - 整数占位符(如果数据为浮点数,会自动转化为整数)
  • %f - 浮点数占位符
  • %.Nf - 浮点数保留N位小数
# 1)%s可以给任何类型的数据占位
str1 = '%sxxx' % '张三'  # 只有一个数据的话可以把括号省略
print(str1)  # 张三xxx

str1 = '%s-xxx' % [10, 20]  # 只有一个数据[10, 20]
print(str1)  # [10, 20]-xxx
# 2)%d可以给任何能转换成数字的数据占位
str1 = '%d-xxx' % 12.5
print(str1)  # 12-xxx
# 3)%f可以给任何能转换成数字的数据占位
str1 = '%f - xxx' % 4.34
print(str1)  # 4.340000 - xxx
str1 = '余额:%.2f' % 3241.2345
print(str1)  # 余额:3241.23

str1 = '%s今年%d岁,月薪:%.2f元' % (name, age, 1000 + 2000)
print(str1)  # 小明今年18岁,月薪:3000.00元

5.2 f-string

  1. 基本用法

    语法:f’{任何有结果的表达式}’ - 用表达式的结果来填充{}所在的位置

    • ‘{数据}’ - {数据},{}内的数据原样显示
    • f’{数据}’ - 将{}内的数据进行替换
    # 基本用法
    name = '小明'
    age = 18
    str1 = f'{name}xxx{age}xxx{age*10}zzz{name[-1]}'
    print(str1)  #小明xxx18xxx180zzz明
    
  2. 加参数

    语法:f’{任何有结果的表达式:参数}’

    参数:

    .Nf	  -   保留N位小数。例如:12.32
    ,    -   每三位用逗号隔开。例如:金额:12,345,677
    %     -   将数据转换为百分比。例如:12%
    .N%   -   将数据转换为百分比,比值保留N位小数
    X > N   -   将数据转换为长度为N的字符串,不够在前面用X对应的字符来填充
    X > N   -   将数据转换为长度为N的字符串,不够在后面用X对应的字符来填充
    
    # a. ,nf
    money = 123456
    str1 = f'余额:{money:.2f}'
    print(str1)  # 余额:123456.00
    # b. ,
    str1 = f'余额:{money:,}'
    print(str1)  # 余额:123,456
    
    # c. %  /  .N%
    rate = 0.5
    str1 = f'市值占有率:{rate:%}'
    print(str1)  # 市值占有率:50.000000%
    str1 = f'市值占有率:{rate:.2%}'
    print(str1)  # 市值占有率:50.00%
    
    # d. X>N  X<N   -   决定填充的时候填在前面还是后面(>是前面,<是后面)
    # X -   填充字符
    # N -   目标长度
    
    num = 9 
    str1 = f'python2000{num:0>3}'  
    print(str1)  # python2000009
    str1 = f'python2000{num:0<3}'
    print(str1)  # python2000900
    

6. 字符串相关方法

菜鸟教程有字符串的全部方法:[https://www.runoob.com/python3/python3-string.html]

6.1 center、rjust、rjust、zfil

字符串.center(长度,填充字符) - ‘abc’.center(7, ‘x’) -> ‘xxabcxx’

字符串.rjust(长度,填充字符) - ‘abc’.rjust(7, ‘x’) -> ‘xxxxabc’

字符串rjust(长度,填充字符) - ‘abc’.ljust(7, ‘x’) -> ‘abcxxxx’

字符串.zfill(长度) == 字符串.rjust(长度,‘0’)- ‘abc’.zjust(7) -> ‘000abc’

其中:

? center 将原字符中间对齐,并使用填充字符将其填充为指定长度

? rjust 将原字符右对齐,并使用填充字符将其填充为指定长度

? ljust 将原字符左对齐,并使用填充字符将其填充为指定长度

? zfill 将原字符右对齐,并使用填充字符0将其填充为指定长度

print('abc'.center(7, 'x'))  # xxabcxx
print('abc'.zfill(7))  # 0000abc
print('abc'.center(6, 'x'))  # xabcxx

6.2 count

字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数

字符串1.count(字符串2,开始下标,结束下标) - 在字符串1中[开始下标,结束下标)范围内统计字符串2出现的次数

str1 = 'how are you? i am fine, thank you! and you?'
print(str1.count('you'))  # 3
print(str1.count('a', 0, 12))  # 1,第12位取不到

6.3 find、index

字符串1.find(字符串2) - 获取字符串1中字符串2第一次出现的为位置,范围0开始的下标值(从前往后找);如果不存在返回-1

字符串1.index(字符串2) - 获取字符串1中字符串2第一次出现的为位置,范围0开始的下标值(从前往后找);如果不存在会报错

字符串1.find(字符串2,开始下标,结束下标) - 在字符串1中[开始下标,结束下标)范围内获取字符串2第一次出现的为位置

字符串1.index(字符串2,开始下标,结束下标) - 在字符串1中[开始下标,结束下标)范围内获取字符串2第一次出现的为位置

str1 = 'how are you? i am fine, thank you! and you?'
print(str1.find('you'))  # 8
print(str1.index('you'))  # 8
print(str1.find('you1'))  # -1,表示找不到
# print(str.index('you1'))  # 报错
print(str1.find('you', 5, 15))  # 8
print(str1.index('you', 10, -1))  # 30

6.4 rfind、rindex

字符串1.rfind(字符串2) - 获取字符串1中字符串2第一次出现的为位置,范围-1开始的下标值(从后往前找);如果不存在返回-1

字符串1.rindex(字符串2) - 获取字符串1中字符串2第一次出现的为位置,范围-1开始的下标值(从后往前找);如果不存在会报错

字符串1.rfind(字符串2,开始下标,结束下标) - 在字符串1中[开始下标,结束下标)范围内获取字符串2第一次出现的为位置

字符串1.rindex(字符串2,开始下标,结束下标) - 在字符串1中[开始下标,结束下标)范围内获取字符串2第一次出现的为位置

str1 = 'how are you? i am fine, thank you! and you?'
print(str1.rfind('you'))  # 8
print(str1.rindex('you'))  # 8

6.5 isalnum

字符串.isalnum() - 判断字符串是否只有字母或者数字,是返回

注意:只判断ASCII码内的内容,ASCII外的内容不管

print('ahs234函数')  # True,它只判断ASCII码内的内容,ASCII外的内容不管

6.6 isdigit、isnumeric

字符串.isdigit() - 判断是否是纯数字字符串(数字指0~9的数字字符)

字符串.isnumeric() - 判断是否是纯数字字符串(数字指具有数字意义的字符)

print('12345'.isdigit())  # True
print('12345'.isnumeric())  # True
print('12345一二十百千万'.isnumeric())  # True
print('12345壹'.isnumeric())  # True
print('12345①'.isnumeric())  # True

6.7 islower isupper

字符串.islower() - 判断字符串是否是纯小写字母字符串

字符.islower() - 判断字符串是否是纯小写字母字符串

字符串.isupper() - 判断字符串是否是纯大写字母字符串

字符.isupper() - 判断字符串是否是纯大写字母字符串

print('abC'.islower())  # False
print('abC'.isupper())  # False

6.8 join

字符串.join(序列) - 将序列中的元素用指定的字符串拼接成一个新的字符串

注意:

  • 序列中的元素必须是字符串,不然会报错

  • 如果序列为列表,则列表中的元素必须是字符串才行

result = '+'.join('abc')  # 将'abc'中各元素用'+'拼接成一个新的字符串
print(result)  # a+b+c

result = 'and'.join('abc')
print(result)  # aandbandc

result = '+'.join(['小明', '张三'])
print(result)  # 小明+张三

result = ''.join(['小明', '张三'])  # 想要无缝连接,则采用空串''连接
print(result)  # 小明张三
# 练习1:将下面列表中的元素合并成一个字符串
# ['abc', 100, 12.5, True, 'hello']  -> 'abc10012.5Truehello'
list1 = ['abc', 100, 12.5, True, 'hello']
str1 = ''.join(str(x) for x in list1)
print(str1)
# 练习2:已经一个列表保存多个学生的分数,提取所有学生的姓名,以一个字符串的形式返回
# [{'name':'张三', 'age': 18}, {'name':'小明', 'age': 20},
# {'name':'小花', 'age': 30}]  -> '张三,小明,小花'
students = [{'name': '张三', 'age': 18}, {'name': '小明', 'age': 20}, {'name': '小花', 'age': 30}]
result = ','.join(x['name'] for x in students)
print(result)

6.9 lower、upper

字符串.lower() - 转换字符串中的大写字母为小写

字符串.upper() - 转换字符串中的小写字母为大写

6.10 strip.lstrip.rstrip

字符串.strip() - 去除字符串两端的空白字符

字符串.lstrip() - 去除字符串前端(即左端)的空白字符

字符串.lstrip() - 去除字符串后端(即右端)的空白字符

空白字符:空格、tab键、换行

str1 = ' \tabc123   \n'
print(str1)  # abc123
print(str1.strip())  # abc123
print(str1.lstrip())  # abc123
print(str1.rstrip())  # abc123

6.11 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', 2)
print(result)  # how are me? i am fine, thank me! and you?

6.12 maketrans、translate

两者一般成对使用

str.maketrans(字符串1,字符串2) - 创建字符串1和字符串2的字符对应表

注意:字符串1和字符2的长度一致,对应位置上的字符相对应

字符串.translate(表) - 将字符串按照表内的字符替换方式进行替换

str1 = 'how are you? i am fine, thank you! and you?'
table = str.maketrans('ain', '你我他')  # a-你,i-我,n-他
result = str1.translate(table)
print(result)  # how 你re you? 我 你m f我他e, th你他k you! 你他d you?
# 练习:将字符串中所有的阿拉伯数字都替换成对应的中文数字
# '123木头人,88'  -> '一二三木头人,八八'
str1 = '123木头人,88'
table = str.maketrans('0123456789', '零一二三四五六七八九')
result = str1.translate(table)
print(result)  # 一二三木头人,八八

6.13 split

字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点进行切割,返回一个由切割后的字符段(不包含字符串2,字符段数量一定是切割点的数量加1)组成的列表,列表中各元素为切割后的各字符段

注意:

切割后的字符段数量 = 切割点的数量 + 1

如果切割点在最前面或者最后面或者出现连续切割点,结果会出现空串

str1 = 'how are you? i am fine, thank you! and you?'
str2 = str1.split('you')
print(str2)  # ['how are ', '? i am fine, thank ', '! and ', '?']
# 如果切割点在最前面或者最后面或者出现连续切割点,结果会出现空串
str1 = 'abcaanea'
print(str1.split('a'))  # ['', 'bc', '', 'ne', '']
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-28 00:08:51  更:2021-09-28 00:08:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:43:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码