容器
容器:也可以称为数据序列,或者高级数据类型,也是python中的数据类型,容器中可以存放多个数据。
字符串
字符串是容器,因为字符串中可以包含多个字符
定义
:使用引号(单引号,双引号,三引号)引起来的内容就是字符串
# 单引号
my_str1 = 'hello'
print(my_str1,type(my_str1))
# 双引号
my_str2 = "hello"
print(my_str2,type(my_str2))
# 三引号
my_str3 = """hello"""
print(my_str3,type(my_str3))
my_str4 = '''hello'''
print(my_str4,type(my_str4))
# 字符串本身包含单引号,则在定义的时候不能使用单引号
# 字符串本身包含单双引号,则在定义的时候不能使用双引号
my_str5 = "I'm 小明" # 不能写为:‘I'm 小明’
print(my_str5)
# 字符串本身包含单引号,在定义的时候,只想使用单引号
# 使用转义字符:\,将字符串本身的引号进行转义:\' ---> ‘ \" ---> "
my_str6 = 'I\'m 小明'
print(my_str6)
# 打印:I\'m 小明
# 使用 \\ : \\ ---> \
my_str7 = 'I\\\'m 小明'
print(my_str7)
# 打印:I\'m 小明
# 字符串前加上r'',原生字符串,字符串中的 \ 不会作为转义字符,文件操作会用一下
my_str8 = r'I\'m 小明'
print(my_str8)
my_str9 = r'I\\\'m 小明'
print(my_str9)
下标
下标(索引):是指字符在字符串的位置编号,这个编号就是下标。这个编号一般来说都是从左到右进行编号,从0开始的(python中支持负数下标,从右到左进行编号,从-1开始)
下标作用
:可以使用下标获取字符串中某个位置的字符
语法
:字符串[下标]
str = 'abcdefg'
# 打印第一个 a
print(str[0])
# 打印第三个 c
print(str[2])
# 打印最后一个 g
print(str[-1])
# 打印到数第二个 f
print(str[-2])
#获取字符串中字符的个数(获取字符串的长度)
# len(字符串) length(长度)
num = len(str)
print(num) # 7
# 最后一个字符 g
print(str[num-1])
print(str[len(str)]-1)
切片
切片:可以获取字符串中多个字符(多个字符的下标是有规律的,等差数列)
语法
:字符串[start :end :step]
1、start 是开始位置的下标,end是结束位置的下标(注意,不能取到这个位置的字符),step是步长,等差数列的差值,所取的相邻字符之间的差值,默认是1,可以不写
例:
[1 : 5 :1] # 1 2 3 4
[1 : 5 :2] # 1 3
[1 : 5 :3] # 1 4
[1 : 5 :4] # 1
str = 'abcdefg'
# 获取abc
print(str[0:3:1])
# 如果步长是1可以不写,最后一个冒号也不写
print(str[0:3])
# 如果开始位置为0,可以不写,但是冒号必须有
print(str[:3])
# 获取efg
print(str[4:7])
print(str[-3:7])
# 如果最后一个字符也要取,可以不写,但是冒号必须有
print(str[4:])
# 获取全部内容
# 如果开始和结束都不写,获取全部内容,但是冒号必须有
print(str[:])
# 获取aceg 0 2 4 6
print(str[0:7:2])
print(str[::2])
# 特殊应用,步长为负数,开始和结束不写,意思全变,一般不用管,只有一种使用场景
# 反转(逆置)字符串,字符串[::-1]
# gfedcba
print(str[::-1])
字符串的查找方法 find
- 用法
字符串.find(sub_str,start,end)
作用
:在字符串中查找是否存在sub_str 这样的字符串
sub_str
:要查找的小的字符串
start
:开始位置,从哪个下标位置开始查找,一般不写,默认是0
end
:结束位置,查找到哪个下标结束,一般不写,默认是len()
返回
(代码执行之后会得到什么,如果有返回,就可以使用变量保存):
1、如果在字符串找到了 sub_str,返回sub_str 第一次出现的正数下标(sub_str 中第一个字符在大字符串中的下标)
2、如果没有找到,返回-1
- 代码案例
str1 = 'and itcast and python and English'
# 查找 and 返回第一个and的下标:0
num = str1.find('and')
print(num)
# 查找第二个 and 返回第二个and下标:11 从第一次出现的后一位开始找
num1=str1.find('and',num+1)
print(num1)
# 查找第三个 and 返回第三个and下标:22 从第二次出现的后一位开始找
num2=str1.find('and',num1+1)
print(num2)
# 查找第四个 and 返回第四个and下标:-1 从第三次出现的后一位开始找
num3=str1.find('and',num2+1)
print(num3)
字符串的替换方法 replace
- 用法
字符串.replace(old_str,new_str,count)
作用
:将字符串中 old_str 替换为 new_str
old_str
:被替换的内容
new_str
:替换为的内容
count
:替换的次数,一般不写,默认是全部替换
返回
:替换之后的完整的字符串,注意:原来的字符串没有发生改变
- 代码案例
str1 = 'good good study'
# 将str1中所有的 g 改为 G
str2= str1.replace('g','G')
# str1: good good study
print('str1:',str1)
# str2: Good Good study
print('str2:',str2)
# 将第一个good改成GOOD
str3= str1.replace('good','GOOD',1)
print('str3:',str3)
# 将第二个good改成GOOD
str4= str1.replace('good','GOOD')
str4= str4.replace('GOOD','good',1)
print('str4:',str4)
字符串的拆分 split
- 用法
字符串.split(sep,maxsplit)
作用
:将字符串按照sep进行分割(拆分)
sep
:字符串按照什么进行拆分,默认是空白字符(空格,换行\n,tab键\t)
mazsplit
:分割次数,一般不写,全部分割
返回
:将一个字符串拆分为多少个,存到列表中
注意:如果sep不写,想要指定分割次数,则需要写成:字符串.split(maxsplit=n)
- 代码案例
str1 = 'hello world and itcast and python and english'
# 将str1按照and进行拆分
result1 = str1.split('and')
print(result1)
# 将str1按照and进行拆分,只拆分1次
result2 = str1.split('and',1)
print(result2)
# 将str1按照空白字符进行拆分
result3 = str1.split()
print(result3)
# 将str1按照空白字符进行拆分,只拆分一次
result4 = str1.split(maxsplit=1)
print(result4)
字符串的链接 join
- 用法
字符串.join(列表)
# 括号中的内容主要是列表,可以是其他容器
作用
:将字符串插入到列表中每相邻的两个数据之间,组成一个新的字符串
列表中的数据使用 使用逗号隔开
注意
:列表中的数据必须是字符串,否则会报错
list1= ['hello', 'world', 'and', 'itcast', 'and', 'python', 'and', 'english']
# 将列表中的数据使用空格链接
str= ' '.join(list1)
print(str)
# hello world and itcast and python and english
# 将列表中的数据使用and链接
str1= ' and '.join(list1)
print(str1)
# hello and world and and and itcast and and and python and and and english
#hello world and itcast and python and english
list2= ['hello world','itcast','python','english']
str2 = ' and '.join(list2)
print(str2)
列表
列表list中可以存储多个数据,每个数据之间使用逗号隔开,列表中可以存放任意类型的数据
- 定义
# 1、类实例化的方法(不常用)
# 定义空列表(没有任何数据的列表) 变量 = list()
list1 = list()
print(type(list1),list1) #<class 'list'> []
# 类型转换 list(容器) 将其他的容器转换为列表
# 转换字符串会将字符串中的每一个字符作为一个数据存入到列表中
list2 = list('hello')
print(type(list2),list2) # <class 'list'> ['h', 'e', 'l', 'l', 'o']
# 2、直接使用 [] 进行定义(常用)
# 定义空列表
my_list = []
print(my_list) # []
# 定义非空列表
my_list1 = [1,'小明',3.14,False]
print(my_list1) # [1, '小明', 3.14, False]
列表支持下标和切片
列表支持下标和切片操作,使用方法和字符串中的使用方法一致。
区别
:列表的切片得到的是列表
list1 = ['小明', 18, 3.14, True]
# 获取第一个数据
print(list1[0]) # 小明
# 获取最后一个数据
print(list1[-1]) # True
# 获取第一第二个数据
print(list1[0:2]) # ['小明', 18]
# 列表页支持 len()求长度的,求数据元素个数
print(len(list1)) # 4
查找-列表中数据下标的方法
在字符串
中使用 find 方法查找下标的,不存在返回的是 -1
在列表
中没有 find方法, 想要查找数据的下标,使用 index()
方法
- 用法
列表.index(数据,start,end) # 使用方法和 find 方法一样,同时在字符串中也有index 方法
区别
:返回,index()方法,找到返回第一次出现的下标,没有找到代码直接报错
查找-判断是否存在
判断容器中某个数据是否存在,可以使用 in
关键字
- 用法
数据 in 容器 # 如果存在,返回True;如果不存在,返回False
查找-统计出现的次数
- 用法
列表.count(数据) # 返回 数据出现的次数
my_list = [1, 3, 5, 7, 2, 3]
#index()
# 查找数据3出现的下标
num= my_list.index(3)
print(num) # 1
# 查找数据4出现的下标
num1= my_list.index(4)
print(num1) # 会报错 ValueError: 4 is not in list
# in
# 查找数据4出现的下标
if 4 in my_list:
print(my_list.index(4))
else:
print('不存在数据4') # 不会报错 不存在数据4
# count
# 查找数据4出现的下标
if my_list.count(4) >0 :
print(my_list.index(4))
else:
print('不存在数据4') # 不会报错 不存在数据4
添加数据的方法
- 尾部添加(最常用)
列表.append(数据)
# 将数据添加到列表的尾部
返回
:返回的 None (关键字,空),一般就不会再使用 变量 来保存返回的内容,想要查看添加后的列表,需要打印的是列表 - 指定下标位置添加
列表.insert(下标,数据)
# 在指定的下标位置添加数据,如果指定的下标位置本来有数据,原数据会后移
返回
:返回的 None (关键字,空),一般就不会再使用 变量 来保存返回的内容,想要查看添加后的列表,需要打印的是列表 - 列表合并
列表1.extend(列表2)
# 将列表2中的所有数据逐个添加到列表1的尾部
返回
:返回的 None (关键字,空),一般就不会再使用 变量 来保存返回的内容,想要查看添加后的列表,需要打印的是列表 - 代码案例
my_list = []
print(my_list) # []
# 1、向空列表里添加数据:学习
my_list.append('学习')
print(my_list) # ['学习']
# 2、向列表尾部添加数据:进步
my_list.append('进步')
print(my_list) # ['学习', '进步']
# 3、在下标为1的位置添加数据:发奋
my_list.insert(1,'发奋')
print(my_list) # ['学习', '发奋', '进步']
# 4、在下标为1的位置添加数据:图强
my_list.insert(1,'图强')
print(my_list) # ['学习', '图强', '发奋', '进步']
# 5、定义新的列表 list1
list1 = ['郭德纲','郭麒麟']
# 将list1中的数据逐个添加到 my_list中
my_list.extend(list1)
print(my_list) # ['学习', '图强', '发奋', '进步', '郭德纲', '郭麒麟']
# 将list1中的数据作为一个整体添加到 my_list中
my_list.append(list1)
print(my_list) # ['学习', '图强', '发奋', '进步', '郭德纲', '郭麒麟', ['郭德纲', '郭麒麟']]
补充
# 循环几次,n就是几
for i in range(n):
pass
# 循环每执行一次,在列表添加一个数据
变量名 = [ 生成数据的规则 for 变量 in xxx]
# 等价 list1=[i for i in range(5)] [0,1,2,3,4]
list1 = []
for i in range(5):
list1.append(i)
# ['hello', 'hello', 'hello', 'hello', 'hello']
list2 = ['hello' for i in range(5)]
print(list2)
# [0, 1, 2, 3, 4]
list3 = [i for i in range(5)]
print(list3)
# ['hello', 'hello', 'hello', 'hello', 'hello']
list4 = [i for i in list2]
print(list4)