一、字符串

  • 字符串定义
  • 字符串下标
  • 字符串切片
  • 字符串常用方法查找方法
    替换方法
    判断方法

二、字符串实操



1、字符串定义

"""
字符串
1、字符串是python中最常用的数据类型,是不可变类型
2、一般用引号来创建字符串,可用单引号、双引号、三引号
  (三引号形式的字符串支持换行,即多行字符串)
"""

# 单引号
str1 = 'hello'
str2 = 'I\'m TOM'  # 字段串中间出现单引号,要用反斜杠转义
print(f'单引号:{str1}, {str2}')
print(type(str1), type(str2))

# 双引号
str1 = "hello wold"
str2 = "I'm Tina"
str3 = "I'm " \
       "Tina"  # 代码中换行,输出不换行
print(f'双引号:{str1}, {str2}, {str3}')
print(type(str1), type(str2), type(str3))

# 三引号(支持换行输出)
str1 = ''' I\'m Jack,
                     nice to meet you!
       '''
str2 = """ I'm Rose,
                     nice to meet you,too!
       """
print(f'三引号:{str1}, {str2}')
print(type(str1), type(str2))

out:

单引号:hello, I'm TOM
<class 'str'> <class 'str'>
双引号:hello wold, I'm Tina, I'm Tina
<class 'str'> <class 'str'> <class 'str'>
三引号: I'm Jack,
                     nice to meet you!
       ,  I'm Rose,
                     nice to meet you,too!



2、字符串下标

又称索引,通过下标能快速找到相应的存储空间(python中下标从0开始)

# 下标
# 语法: 字符串[下标]
str1 = "Hello,Tina"
print(str1[0])  # H
print(str1[6])  # T
print(str1[7])  # i



3、字符串切片

切片是指对操作的序列截取其中⼀部分的操作

'''
# 切片
1、语法:序列[开始位置下标:结束位置下标:步⻓]
2、注意: (1) 步长为选取间隔,正负整数均可,不填则默认步长为1
        (2) 左闭右开(不包含结束位置下标的数据),正负整数均可
'''
str1 = '0123456789'
print(str1[0: 4: 1])  # 0123
print(str1[0: 4: 2])  # 02  选取间隔为2
print(str1[-2: -6: -1])  # 8765 倒数第2个到倒数第6个(不含第6个数)
print(str1[-2: -6: 1])  # 无输出,选取方向与步长方向不一致,则无法输出相应数据(从-2到-6是从右往左,步长1代表从左往右选取,方向相反)



4、字符串常用操作方法

4.1、查找

查找方法

描述

语法

find():

检测某个子串是否包含在这个字符串中,如果在,返回子串开始位置下标,否则返回-1。

字符串序列.find(子串, 开始位置下标, 结束位置下标)

index():

检测某个子串是否包含在这个字符串中,如果在,返回子串开始位置下标,否则抛出异常。

字符串序列.index(子串, 开始位置下标, 结束位置下标)

rfind():

功能同find,但是查找方向是从右边开始。

字符串序列.rfind(子串, 开始位置下标, 结束位置下标)

rindex():

功能同index,但是查找方向是从右边开始。

字符串序列.rindex(子串, 开始位置下标, 结束位置下标)

count():

计算子串在字符串中出现的总次数。

字符串序列.count(⼦串, 开始位置下标, 结束位置下标)

(1)查找子串在字符串中的位置

find()

# find()
# 语法:字符串序列.find(子串,开始位置下标,结束位置下标)
str1 = 'I like apple and orange and strawberry and banana.'

# 若字符串序列中有多个目标子串,返回第一个子串的开始下标
print(str1.find('and'))  # 13

# 若字符串序列中未查询到目标子串,返回-1
print(str1.find('and', 16, 20))  # -1 --范围内没找到

print(str1.find('and', 16, 30))  # 24
print(str1.find('and', 30))  # 39

# 下标不支持负整数
print(str1.find('and', -1, -30))  # -1

rfind()

# rfind()
print(str1.rfind('and'))  # 39
#  从右边开始16位到24位
print(str1.rfind('and', 16, 30))  # 24

index()

# index()
# 语法:字符串序列.index(子串,开始位置下标,结束位置下标)
str1 = 'I like apple and orange and strawberry and banana.'
print(str1.index('and'))  # 13
print(str1.index('and', 20, 30))  # 24

# 找不到数据抛出异常
print(str1.index('and', 16, 20))  # 异常

rindex()

# rindex()
print(str1.rindex('and'))  # 39

(2)查找子串在字符串中的个数

count()

# count()
# 字符串序列.count(子串,开始位置下标,结束位置下标)
str1 = 'I like apple and orange and strawberry and banana.'

print(str1.count('and'))  # 3
print(str1.count('ands'))  # 0
print(str1.count('and', 10, 30))  # 2

4.2、修改

修改字符串,指的就是通过函数的形式修改字符串中的数据。

(1) 替换、分割、合并

replace():替换

'''
replace()
语法:字符串序列.replace(旧子串,新子串,替换次数)
如果不填写替换次数,默认旧子串无论在字符串中出现几次,都全部替换
''' 

str1 = 'I like apple and orange and strawberry and banana.'
str2 = str1.replace('and', 'he')
print(str2)  

# 指定替换次数
str2 = str1.replace('and', 'he', 1)
print(str2)

注意:
数据按照是否能直接修改分为可变类型和不可变类型两种。字符串类型的数据修改的时候,不能改变原有字符串,属于不能直接修改数据的类型即是不可变类型。

split():按照指定字符分割字符串

''''
split()
语法:字符串序列.split(分割字符,num)
num表分割字符出现的次数
'''
str1 = 'I like apple and orange and strawberry and banana.'
print(str1.split('and'))
print(str1.split('and', 2))

注意:如果分割字符是原有字符串中的⼦串,分割后则丢失该⼦串。

join():字符串合并

'''
# join()
# 语法:字符或⼦串.join(多字符串组成的序列)

# 字符或⼦串会插入到序列当中每个元素的后面,组成一个新的字符串
'''
str1 = '..?'
str2 = 'abcde'
str3 = str1.join(str2)
print(str3)  # a..?b..?c..?d..?e

(2)大小写转换

capitalize():仅字符串首字母大写

# capitalize()
str1 = 'i like apple and orange and strawberry and banana.'
print(str1.capitalize())

out:

I like apple and orange and strawberry and banana.

title():字符串中每个单词首字母大写

# title()
print(str1.title())

out:

I Like Apple And Orange And Strawberry And Banana.

upper():字符串中小写字母全部转换成大写

# upper()
print(str1.upper())

out:

I LIKE APPLE AND ORANGE AND STRAWBERRY AND BANANA.

lower():字符串中大写字母全部转换成小写

# lower()
str1 = 'ABCD'
print(str1.lower())

out:

abcd

(3) 去除空白符

方法

描述

lstrip()

删除字符串左侧空白

rstrip()

删除字符串右侧空白

stripe()

删除字符串两侧空白

str1 = '   hello   '
# lstripe()
print(str1.lstrip())

# rstripe()
print(str1.rstrip())

# stripe()
print(str1.strip())

out:

hello   
   hello
hello

(4) 对齐

方法

描述

ljust()

字符串左对齐

rjust()

字符串右对齐

center()

居中(但并非绝对居中)

数据按指定方向对齐,使用指定字符(默认空格)填充至对应长度的新字符串。

str1 = 'hello'

# ljust()
# 语法:字符串序列.ljust(长度,填充字符)
# 填充字符:不填写则默认空格
print(str1.ljust(10, '.'))

# rjust()
# 语法:字符串序列.rjust(长度,填充字符)
# 填充字符:不填写则默认空格
print(str1.rjust(10, '.'))  # .....hello

# center()
# 语法:字符串序列.center(长度,填充字符)
# 填充字符:不填写则默认空格
print(str1.center(10, '.'))  # ..hello...  --可以看出只是相对居中

out:

hello.....
.....hello
..hello...

4.3、判断

方法

描述

startswith

判断字符串是否是以子串开头,是则返回true,否则返回false;如果设置开始和结束位置下标,则在指定范围内检查

endswith

判断字符串是否是以子串结尾,是则返回true,否则返回false;如果设置开始和结束位置下标,则在指定范围内检查

isalpha

判断非空字符串是否全部都是由–字母–组成,是则返回true,否则返回false

isdight

判断非空字符串是否全部都是由–数字–组成,是则返回true,否则返回false

isalnum

判断非空字符串是否仅由字母、数字其中一种或两种组合组成,是则返回true,否则返回false

ispace

判断非空字符串是否仅由空白字符组成,是则返回true,否则返回false

startswith():字符串是否以指定子串开头

# 字符串.startswith(子串,开始位置下标,结束位置下标)
str1 = 'Hello,world'
print(str1.startswith('He'))  # True
print(str1.startswith('l', 2))  # True

endswith():字符串是否以指定子串结尾

# 字符串.endswith(子串,开始位置下标,结束位置下标)
str1 = 'Hello,world'
print(str1.endswith('rld'))  # True

isalpha():字符串是否全部由字母或者中文汉字组成

# isalpha()
print(str1.isalpha())  # False,有逗号
str2 = 'abcd'
print(str2.isalpha())  # True

# 中文亦可
my_str = '我们'
print(my_str.isalpha())  # True

isdight():字符串是否全部由数字组成

# isdight()
str1 = '12 345'
str2 = '12345'
print(str1.isdigit())  # False,有空白符
print(str2.isdigit())  # True

isalnum():字符串是否仅由字母、数字其中一种或两种组合组成

# isalnum()
str1 = 'abcd'
str2 = '12345'
str3 = 'a1'
print(str1.isalnum())  # True
print(str2.isalnum())  # True
print(str3.isalnum())  # True

isspace():字符串是否仅由空白字符组成

# isspace()
str1 = '12 345'
str2 = '     '
print(str1.isspace())  # False,有数字
print(str2.isspace())  # True