目录
容器:
容器变量可以存储多个元素,减少变量的定义。
in 操作符
in 是python中的关键字.
数据 in 容器 可以用来判断容器中是否包含这个数据,如果包含返回True,如果不包含返回False
对于字典来说,判断的是字典中是否包含这个键.
容器分类:
根据不同容器的特性,将容器分为序列式容器和非序列式容器。
- 序列式容器:元素是连续存放的, 除了第一个元素的前面没有元素,最后一
个元素的后面没有元素,其他所有的元素前后都有一个元素。包括字符串、列表、元组。
序列式容器支持根据索引(下标)访问元素,非序列式容器不支持索引(下标)的方式访问元素;
序列式容器支持切片操作,非序列式容器不支持切片操作。
序列式容器的索引都是以 0 开始的, 并不是从 1 开始.- 非序列式容器:在存储元素时不是连续存放的,容器中的任何一个元素前后都可能没有元素。 包括字典、集合。
集合
集合set,{数据,数据,...}
1.集合中的数据是不能重复的,即没有重复数据;
2.应用,对列表进行去重操作就是类型转换,可以将列表转换为集合,然后再将集合转换为列表.
my_list = [1, 2, 1, 3, 4, 1, 2, 4, 57]
# 方式一
list1 = list(set(my_list)) # 先转换成集合,再转换成列表
print(list1)
# 方式二
new_List = [] # 定义新列表.保存去重后的数据
# 遍历原列表
for i in my_list:
# 判断数据是否存在新列表
if i not in new_List:
new_List.append(i)
print(new_List)
遍历:
不重复的访问容器中的每一个元素.
字符串:
- 定义字符串:
- 字符串使用一对单引号来定义;
- 字符串使用一对双引号来定义;
- 字符串使用一对三引号来定义;
- 如果字符串本身包含单引号,定义的时候不能使用单引号;
- 如果字符串本身包含双引号,定义的时候不能使用双引号。
下标(索引)
- 下标(索引),是数据在容器(字符串,列表,元组)中的位置、编号;
- 一般来说,使用的是正数下标,从0开始;
- 作用:可以通过下标来获取具体位置的数据,使用的语法为容器[下标];
- python中是支持负数下标,-1表示最后一个位置的数据。
str1 = 'abcdefg'
#需求:打印输出字符串中的a字符
print(str1[1])
print(str1[-6])
#需求:打印输出字符串中最后一个字符(-1)
print(str1[-1])
#需求:打印输出下标为3的位置的字符
print(str1[3])
- 字符串替换:
poetry = '远看泰山黑乎乎, 上头细来下头粗. 茹把泰山倒过来, 下头细来上头粗.茹'
# replace并不会替换原本的字符串,替换完毕之后返回一个新的字符串
new_poetry = poetry.replace('茹', '如')
print(poetry)
print(new_poetry)
#容器专属方法(函数)
#字符串通过.(点)的方式调用专属的函数.
new_poetry = poetry.replace('茹', '如', 1)
print(new_poetry)
- 字符串特点:
- 字符串一旦定义不允许修改;
- 字符串容器中的元素都是字符类型的.
#找到字符串中@的位置
user_mail = 'hdiangaanfhq@dhao.com'
#如果查找到,返回字串第一次出现@的位置
#如果查找不到@,返回-1
position = user_mail.find('@')
if position == -1:
print('@不存在,邮箱不合法!')
else:
print('@的位置是:',position)
字符串切片:
- 使用切片操作,可以一次性获取容器中的多个数据(多个数据之间存在一定的规律,数据的下标是等差数列(相邻的两个数字之间的差值是一样的));
- 语法:容器[start:end:step]
2.1 start 表示开始位置的下标
2.2 end 表示结束位置的下标,但是end所对应的下标位置的数据是不能取到的
2.3 step 步长,表示的意思就是相邻两个坐标的差值
start,start+step,start+step*2,...,end(取不到)
my_str = 'abcdefg'
#需求1:打印字符串中abc字符,start 0,end 3,step 1
print(my_str[0:3:1])
#1.1 如果步长是1,可以省略不写
print(my_str[0:3])
#1.2 如果start开始位置的下标为0,可以不写,但是冒号不能少
print(my_str[:3])
#需求2:打印字符串中的efg,start 4,end 7,step 1
print(my_str[4:7:1])
#2.1 如果取到最后一个字符,end可以不写,但是冒号不能少
print(my_str[4:])
#需求3:打印字符串中的aceg,start 0,end 7,step 2
print(my_str[::2])
#练习:cf
print(my_str[2:6:3])
#特殊情况,步长为-1,反转(逆序)字符串
print(my_str[::-1])
#字符串提供了一种语法,用来获取字符串中的一个字串
user_mail = 'hdiangaanfhq@dhao.com'
print(user_mail[0])
#切片语法,左闭右开
print(user_mail[0:4])
#获得容器元素的个数
string_length = len(user_mail)
print(user_mail[13:string_length])
#起始值不写表示从0开始
print(user_mail[:12])
#结束值不写表示到最后
print(user_mail[13:])
#起始值和结束值都不写表示从头到尾
print(user_mail[:])
#步长
print(user_mail[0:12:3])
#起始,结束,步长都可以为负数
print(user_mail[-5:-1])
#字符串逆序
print(user_mail[::-1])
字符串查找
字符串.find(sub_str) #在字符串中,查找是否存在sub_str这样的字符串返回值(这行代码执行的结果)
1.如果存在sub_str,返回第一次出现sub_str位置的下标;
2.如果不存在sub_str,返回-1
#1.现有字符串数据:“白日依山尽”
#2.请设计程序,实现判断“白日”和“红日”是否存在于数据中
#3.要求如果数据存在,则输出数据所在位置
my_str = '白日依山尽'
sub_str = '白日'
result = my_str.find(sub_str)
if result == -1:
print(f'{sub_str}不存在')
else:
print(f'{sub_str}存在,下标位置为:',result)
字符串替换
字符串.replace(old,new,count) #将字符串中的old字符串替换为new字符串
old 原字符串,被替换的字符串
new 新字符串,要替换的字符串
count 一般不写,表示全部替换,可以指定替换的次数
返回:会返回一个替换后的完整的字符串
注意:原字符串不会改变
my_str = 'good good study'
#需求,将good变为GOOD
my_str_new = my_str.replace('good','GOOD')
print(my_str_new)
print(my_str)
#将第一个good替换为Good
my_str_new_1 = my_str.replace('good','Good',1)
print(my_str_new_1)
print(my_str)
#将第二个good替换为Good
#先整体替换为Good,再将替换后的第一个Good替换为good
my_str_new_2 = my_str.replace('good','Good').replace('Good','good',1)
print(my_str_new_2)
print(my_str)
字符串拆分:
字符串.split(sep) #将字符串按照指定的字符串sep进行分隔
sep,按照sep分隔,可以不写,默认按照空白字符(空格\t \n)分隔
返回:列表,列表中的每个数据就是分隔后的字符串
str1 = 'hello python\tand itcast and\nitheima'
#1.默认按照空白字符分隔
list1 = str1.split()
print(list1)
#2.按照空格分隔
list2 = str1.split(' ')
print(list2)
#3.按照and分隔
list3 = str1.split('and')
print(list3)
#split 拆分
user_mail = 'hdiangaanfhq@dhao.com'
#获得@字符串在user_mail中出现的参数
char_count = user_mail.count('@')
if char_count > 1:
print('您的邮箱不合法!')
else:
result = user_mail.split('@')
print(result)
print('用户名:',result[0])
print('邮箱后缀:',result[1])
- 字符串去除左右两侧空格,判断字符串是否全为字母:
user_name = input('请输入用户名:')
#strip函数默认去除字符串两侧的空格
new_user_name = user_name.strip()
#isalpha判断字符串所有元素是否都是字母
if new_user_name.isalpha():
print('注册成功')
else:
print('注册失败')
字符串的连接--join
字符串.join(容器) #容器一般是列表,将字符串插入到列表相邻的两个数据之间,组成新的字符串
注意点:列表中的数据,必须都是字符串才可以
list1 = ['hello','python','and','itcast','and','itheima']
#将列表中数据使用空格组成新的字符串
str1 = ' '.join(list1)
print(str1) #hello python and itcast and itheima
#使用逗号连接
str2 = ','.join(list1)
print(str2) #hello,python,and,itcast,and,itheima
#使用_*_连接
str3 = '_*_'.join(list1)
print(str3) #hello_*_python_*_and_*_itcast_*_and_*_itheima
字符串小结:
- 字符串一般使用两个双引号或两个单引号来定义;
- 字符串是序列式容器,支持下标索引和切片操作,索引支持正数和负数;
- 字符串遍历可以使用while循环,也可以使用for循环;
- find方法用于查找指定字串是否存在,存在则返回出现的位置,否则返回-1;
- 字符串的切片语法用于获得指定区间的子串
- 字符串切片语法包含三部分:开始位置、结束位置、步长;
- replace方法用于替换字符串中的指定字串,不会修改原字符串,会返回一个替换后的新字符串;
- count方法返回指定子串出现的次数;
- split方法根据指定的分割字符串,将原字符串分割成多个部分,以列表形式返回;
- strip方法去除字符串两侧空格;
- isalpha方法判断i字符串是否全部为字母组成;
- 字符串的元素不能修改.