欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

08字符串

程序员文章站 2022-07-14 18:46:47
...

字符串

  • 字符串和字符

1.什么是字符串

容器:将’’、""、’’’’’’、"""""",作为容器的标志,里面的每个独立的文字信息就是它的元素(引号中的每个符号都是字符串的元素)
元素:引号中的每个符号都是元素,元素又叫字符
不可变(不支持增删改);有序的(支持下标操作)

s1 = 'a6, 你好'
s2 = "数ki025"
s3 = '※❤'
print(type(s1),type(s2),type(s3))

s4 = '''abc123'''
s5 = """abc123"""
# '''和"""对应的字符串可以在内容中通过回车换行
s6 = '''abc
123
'''
print(s6)

2.字符

python中只有字符的概念,没有对应的数据类型。如果需要字符,用长度是1的字符串表示

  1. 转义字符
    字符串中的元素/符号/字符分为两种:一种是普通字符,另外一种是转义字符
    a.普通字符 - 除了转义字符以外的字符都属于普通字符;普通字符在字符串中表示这个符号本身
    b.转义字符 - 通过\加其他字符的形式存在,它在字符串中有特殊功能或者特殊意义
    \n - 换行(回车)
    \t - 水平制表符(tab)
    ’ - 表示一个单引号
    " - 表示一个双引号
    \ - 表示一个反斜杠
    \u4eff(四位的16进制数) - 表示四位16进制数作为编码值对应的字符
s7 = 'abc\n123'
print(s7)

s8 = 'abc\'123"'
print(s8)

s9 = "abc'123\""
print(s9)

s10 = 'abc\\n123'
print(s10)

s11 = 'abc\u4eff123\u4e8f'
print(s11)

3.字符编码

1)计算机能直接存储的数据只有数字,而且存的是数字的补码
2)文本数据没有办法直接存到计算机中,计算在保存文本数据的时候,存的其实是每个文本符号对应的数字
(对计算机来讲,每个文本符号都会对应一个固定的数字),每一个文本符号对应的数字就是这个符号的编码值
3)字符编码方式:ASCII码,Unicode码
编码表中记录了不同的符号对应的编码值,一一对应
ASCII码表:a.总共128个字符,每个字符对应的编码范围为0-127(只有美国符号)
b.数字在字母的前面;大写字母在小写字母前面;大写字母和小写字母没有紧挨着
Unicode编码表:a.Unicode编码表示ASCII码表的扩展
b.中文编码范围:4e00-9fa5
c.python采用的Unicode

4.编码值的使用

1)编码字符:\u编码值

print('\u4e00~\u9fa5')
print('a\u0061')

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

print(chr(0x4e00))
print(chr(97))
print(chr(0x56ef))

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

print(ord('余'), ord('婷')) # 20313 23159
print(hex(ord('余')), hex(ord('婷'))) # 0x4f59 0x5a77
  • 获取字符

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

# 字符串[下标]
str1 = 'hello python!'
print(str1[1], str1[-1])

# a.一个空格是一个字符
str2 = 'abc 123'
print(str2[4])

str3 = 'abc  123'
print(str3[5])

# b.一个转义字符是一个字符
str4 = 'abc\n123'
print(str4[4])

str5 = '\tabc123'
print(str5[1])

str6 = '    abc123'
print(str6[4])

str7 = '\u4e00abc'
print(str7[1])

2)切片

message = 'Really get to know yourself before you make any decision.'
print(message[-5:]) # sion.
print(message[1:6:2]) # ely
print(message[:-5:-1]) # .noi

3)遍历

for x in 'ab\u4e00c':
    print(x)
  • 字符串相关操作

1.数学运算符:+、*
1)字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串

str1 = 'abc'
str2 = '123'
print(str1 + str2)

name = '小明'
age = 18
message = name+'今年'+str(age)+'岁'
print(message)

2)字符串N / N字符串 - 字符串重复N次产生一个新的字符串

print('abc'*2)
print('hello world!\n' * 100)

2.比较运算符

# 1) ==、!=
print('abc' == 'abc')
print('abc' == 'acb')

# 2)>、<、>=、<=
# 字符串1 > 字符串2
# 两个字符串比较大小,比较的是第一对不相等的字符的大小(两个字符比较大小比较的是字符的编码值的大小)
print('abc' > '123456') # True
print('Abc' > 'abc') # False
print('余婷' > 'hello world!') # True

# 比较运算符的应用:判断字符的类型
"""
是否是数字:48 <= ord(字符) <= 57 / '0' <= 字符 <= '9'
是否是大写字母: 'A' <= 字符 <= 'Z'
是否是小写字母: 'a' <= 字符 <= 'z'
是否是字母:'A' <= 字符 <= 'Z' or 'a' <= 字符 <= 'z'
是否是中文:'\u4e00' <= 字符 <= '\u9fa5'
"""
# 练习:分别统计字符串中中文字符的个数和字母的个数
str3 = 'hsjj数据是2823竭尽所能SJJ==-2...数kkl'
chinese = 0
for x in str3:
    if '\u4e00' <= x <= '\u9fa5':
        chinese += 1
print('中文字符的个数为:',chinese)

word = 0
for x in str3:
    if 'a' <= x <= 'z' or 'A' <= x <= 'Z':
        word += 1
print('英文字符的个数为:',word)

# 练习2:判断一个字符串中是否有数字字符,有打印True, 没有打印False
# 'bans江苏省'  -> False   '三角函数sss223=='  -> True
str4 = 'bans江苏省'
str5 = '三角函数sss223=='

for x in str4:
    if '0' <= x <= '9':
        print(True)
        break
else:
    print(False)

for x in str5:
    if '0' <= x <= '9':
        print(True)
        break
else:
    print(False)

3.in 和 not in
字符 in 字符串 - 判断字符串中是否存在指定的字符
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串

print('a' in 'abc') # True
print('Z' in 'abc') # False

print('abc' in 'a1b2c3') # False
print('abc' in '123abc舒克舒克') # True

4.相关函数

# max,min,sorted
print(max('jskm')) # s
print(sorted('jskm')) # ['j', 'k', 'm', 's']

# len
print(len('\tabc\n123'))

# str
# str(数据) - 将数据转换成字符串
# 所有类型数据都可以转换成字符串;数据转换成字符串的时候,是直接在数据打印值的最外层加引号
# 100 -> '100'
# [10,20,30] -> '[10,20,30]'
# ['abc',10,20] -> "['abc',10,20]"
list1 = ['abc',10,20]
print(str(list1))
list1_str = str(list1)

# eval()将列表格式的字符串转换成列表,或者将字典格式的字符串转换成字典
new_list1 = eval(list1_str)
print(new_list1)
  • 字符串相关方法

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

str1 = 'abcdddeeffffg'
print(str1.count('d')) # 3
print(str1.count('ddd')) # 1

2.字符串1.index(字符串2) - 获取字符串2第一次出现在字符串1中的位置

message = 'how are you! and you?'
print(message.index('y')) # 8
print(message.index('and')) # 13

3.字符串.join(序列) - 将序列中的元素通过字符串连接产生一个新的字符串
注意:序列中的元素必须是字符串

list1 = ['how', 'are', 'you']
print(str(list1))

result = ''.join(list1)
print(result) # howareyou

result = ' '.join(list1)
print(result) # how are you

result = '加上'.join(list1)
print(result) # how加上are加上you

result = '+'.join('abc')
print(result) # a+b+c

字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割,返回切完后每一段对应的列表
字符串1.split(字符串2,N) - 将字符串1中前N个字符串2作为切割点

message = 'how are you!'
result = message.split(' ')
print(result) # ['how', 'are', 'you!']

# 注意:切割点在两端或连续时会出现空串
print('abc123abc456abc789'.split('abc')) # ['', '123', '456', '789']

print('123abcabc456abc789'.split('abc')) # ['123', '', '456', '789']

list2 = ['', '123', '456', '789']
new_list2 = [x for x in list2 if x]

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

str2 = 'abc123andyou'
print(str2.replace('a','B')) # Bbc123Bndyou
print(str2.replace('123','321')) # abc321andyou
相关标签: 初学python python