字符串全集

一、 什么是字符串(str)

  • 字符串是容器型数据类型,用单引号或双引号作为容器的标志,元素不需要用逗号隔开
  • 字符串是不可变的(不支持增删改),字符串是有序的(支持下标操作)
  • 字符串中的元素,只能是文本符号(所有计算机能表达出来的符号),一个符号对应一个元素
  • 字符串中每个独立的元素叫字符,python中只有字符的概念,但是没有字符对应的数据类型
1) 空字符串和非空字符串
# 空字符串
str1 = ''
str2 =""
str3 = ''''''
str4 = """"""

#非空字符串
str11 = 'abd'
str22 ="你家"
str33 = '''hello'''
str44 = """world"""
2)字符(字符串中的元素)
  • 字符串中的字符分两种,普通字符,转义字符

    • 1)普通字符 : 除了转义字符以外的所有字符
    • 2)转义字符 : 在指定符号前加\用来表示一些特殊功能和特殊意义的字符

    \n 换行
    \t 制表符(按tab键)
    \' 单引号
    \" 双引号
    \\ 反斜杠

    编码字符:\u 加上4位的十六进制:\u4e00

str1 = '\tabc\n123'
print(str1)
str2 ='abc\'123'
print(str2)
str3 = 'acd\\n123'
print(str3)
#注意:计算字符串长度的时候,一个转意字符串的长度是1
str5 = 'u789a'
str6 = '\u789a你好'
print (str5,str6)
  • 阻止转义

    在字符串的最前面加r/R,那么这个字符串中所有的转义符都无效

  str7 = r'\tqwe\nsdf\u4e00'
  print (str7)
  #应用1:windows路径
  path = r'c\nan\temp'
  print (path)
  #应用2:正则表达式

二、什么是字符编码

  • 计算机在存储数据的时候,只能存数字,而且存的数字的补码
  • 为了能够让计算机存储文本数据,给每个字符关联了一个固定的数字,用来对这个字符进行存储,每个字符关联的那个数字就是这个字符的编码值

编码表

1)ASCII码表 一个字节保存一个字符(码值范围:0~127)
  • a. 数字在字母的前面
  • b. 大写字母在小写字母前面(字母之间是连续递增)
  • c. 大写字母和小写字母之间有其他符号
2)Unicode编码表
  • Unicode编码表是对ASCII码表的扩展,Unicode编码表包含了ASCII码表中的符号
  • Unicode编码表包含了世界上所有国家所有名族所有的语言的所有符号(范围:ffff)
  • 中文范围:4e00~9fa5
1)chr函数

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

print (chr(0x0f00))
for x in range(0x0f00,0x0fff):
    print (chr(x), end = ',')
count = 0
for x in range(0x4e00,0x9fa5):
    print (chr(x),end = ' ')
    count += 1
    if count%40 == 0:
        print ()

2)ord函数

ord(字符) 获取指定字符对应的编码值

print ()
print (ord('傻'),ord('瓜'))
3)编码字符
str1 = '\u0f00你好!'
print (str1)

三、获取字符串中的元素(获取字符)


# 字符串获取元素和列表获取元素的语法一样
str1 ='how are you'

# 1)获取单个元素
print (str1[2],str1[-2])

# 2)切片
print(str1[1:3])
print(str1[-3::-1])

# 3)遍历
for x in str1:
    print(x,end='')
print()

for index in range(len(str1)):
    print(str1[index],end='')
print()

四、字符串的其他操作

1) +,*

  • 字符串1+字符串2
  • 字符串*n
s1 = '123'
s2 = 'abc'
print(s1+s2)
print(s1*2)

2) ==,!=

print(s1 == '123')  #True
print(s1 == '321')  #False

3) >,<,>=,=<,(针对两个字符串)

s3 = 'abcd'
s4 = 'ABC'
print(s3>s4)    #True   比较第一组不相等的字符的编码值的大小
应用:
  • 判断是否是数字字符:'0'<= char <='9'
  • 判断是否是小写字母:'a'<=char <='z'
  • 判断是否是大写字母:'A'<=char<='Z'
  • 判断是否是字母: 'a'<=char <='z' or 'A'<=char<='Z'
  • 判断是否是中文字符:'\u4e00'<= char<='\u9fa5'
举个例子
#例1: 输入一个字符串,统计字符串中字母和中文的个数
s5 = 'hello 你好吗?'
count1 = 0
count2 = 0
for s in s5:
    if s >='\u4e00' and s<='\u9fa5':
        count1 += 1
    elif 'a'<= s <='z' or 'A'<= s <='Z':
        count2 += 1
print('中文字符个数',count1,'英文字符个数',count2)

#例2:判断输入的是否是纯数字字符串
s6 = '12345'
for s in s6:
    if  not '0'<= s <='9':
        print('不是纯数字')
        break
else:
    print('是纯数字')

4) in 和 not in

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

print('abc' in 'acbwe')     #False
print('abc' in 'abcmm')     #True

五、相关函数

  • max,min,sum,sorted,reversed等,都可以使用于字符串
  • len(字符串) - 求字符串长度
  • str(数据) - 将自定义数据转换成字符串
  • 所有的数据都能转换成字符串
  • 将数据的打印值作为字符串的内容
  • center,rjust,ljust,zfill(居中,右对齐,左对齐)
  • 字符串.center(长度,填充字符) 产生一个新的字符串
  • 字符串.zfill(长度)== 字符串.rjust(长度,'0')
print('abc'.center(7,'-'))
print('abc'.rjust(7,'*'))

#举例:给任意一个商品的数字编码值,换成固定格式商品编码
num = ['33','44']
str1 = 'GD'
for n in num:
    print(str1 + n.rjust(4,'0'))
  • 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?'
print(str1.replace('you', 'me'))    # how are me? i am fine, Thank me! And me?
print(str1.replace('you', 'me', 1))   # how are me? i am fine, Thank you! And you?
  • count

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

print(str1.count('you'))     # 3

num = str1.count('you', 0, 11)    # 1
print(num)
  • expandtabs(抛弃)

    • 字符串.expandtabs() - 将字符串中的制表符替换成 8 个空格(只针对下标是0的制表符有效,后面是 8 - 3)
    • 字符串.expandtabs(N) - 将字符串中的制表符替换成 N 个空格 (只针对下标是0的制表符有效,后面是 - 3)
str2 = 'Naa\tabc\t123'
new_str2 = str2.expandtabs(2)
print(str2, len(str2))
print(new_str2, len(new_str2))
  • 将制表符替换成8个空格
new_str2 = str2.replace('\t', ' '*8)
print(new_str2)
  • 字符串切割
    • 字符串1.split(字符串2) - 将字符串1按照字符串2为切割点进行切割
    • 字符串1.split(字符串2, N) - 将字符串1按照字符串2为切割点进行切割,切 N 次
    • 字符串1.rsplit(字符串2, N) - 将字符串1按照字符串2为切割点进行切割,切 N 次, 从后往前切
str1 = 'how are you? I am fine, Thank you! And you?'
print(str1.split(' '))   # ['how', 'are', 'you?', 'i', 'am', 'fine,', 'Thank', 'you!', 'And', 'you?']
print(str1.split(' ', 2))     # ['how', 'are', 'you? i am fine, Thank you! And you?']
print(str1.rsplit(' ', 2))    # ['how are you? i am fine, Thank you!', 'And', 'you?']
  • 删除字符
    • 字符串1.strip() - 同时删除字符串最左边和最右边的空白
    • 字符串1.lstrip() - 删除字符串中最左边的所有空白
    • 字符串1.rstrip() - 删除字符串中最右边的所有空白
    • 字符串1.strip(字符串2) - 同时删除字符串最左边和最右边的字符串2
    • 字符串1.lstrip(字符串2) - 删除字符串中最左边的所有字符串2
    • 字符串1.rstrip(字符串2) - 删除字符串中最右边的所有字符串2
str3 = '\n\t abc 123\n 你好  \n'
print('============================')
print(str3)
print('============================')
print(str3.lstrip())
print('============================')
print(str3.rstrip())
print('============================')
print(str3.strip())
print('============================')

str4 = '**1**abc123***'
print(str4.strip('*'))    # 1**abc123
print(str4.rstrip('*'))   # **1**abc123
print(str4.lstrip('*'))   # 1**abc123***
  • 字符串查找
    • 字符串1.find(字符串2) - 获取字符串2第一次在字符串1中出现的位置(用正的下标值表示),如果找不到返回 -1
    • 字符串1.find(字符串2, 开始下标, 结束下标)
str1 = 'how are you? i am fine, Thank you! And you?'
print(str1.find('you'))    # 8

# 练习1:写代码实现查找字符串str1中所有的 'you'出现的位置
start_index = 0
indexs = []
while True:
    index = str1.find('you', start_index)
    if index == -1:
        break
    start_index = index + 3
    indexs.append(index)
print(indexs)
  • 拼接

    字符串.join(容器) - 将容器中元素用指定字符串连接在一起(容器中的元素是字符串)

  list1 = ['路路', '浩浩', '荣荣']
  new_str = ' and '.join(list1)
  print(new_str)

  new_str2 = '+'.join('abc')
  print(new_str2)

  # 练习2:用列表推导式实现将任意容器中的元素用join进行连接
  nums = [10, 20, '30', True]
  # print('+'.join(nums))   # TypeError: sequence item 0: expected str instance, int found

  nums = {'name': '晴晴', 'age': 18, 'sex': '女'}
  new_str3 = ' '.join([str(x) for x in nums.values()])
  print(new_str3)    #晴晴 18 女
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容