这里写目录标题
字符串
字符串特征
总结与分析:
- 对于一对单引号,如果在其中间输入回车,便会变成如下形式
但是其输出结果并不会产生改变。并且在使用单引号的时候产生了类似变量d的情况,可以使用反斜杠(\)当做转义符,使得’的出现变得合法 - 对于任何的三引号,如果在其中间输入回车,便会变成如下形式 ,
并且使其输出变成同样的分行效果
下标
“下标”又叫“索引”,作用是:通过下标快速找到对应的数据。
例如:
str1 = 'abcdefg'
print(str1)
print(str1[0])
print(str1[3])
切片
语法:
序列 [开始位置下标:结束位置下标:步长]
- 不包含结束位置下标对应的数据,正负整数均可;即左闭右开(开始位置下标:结束位置步长)
- 不尝试选取间隔,正负整数均可,默认步长为1。即:步长可以省略不写
str1 = "0123456789"
print(str1[2:5:1]) # 234
str1 = "0123456789"
print(str1[2:5:2]) # 24
str1 = "0123456789"
print(str1[2:5]) # 234
str1 = "0123456789"
print(str1[:5]) # 01234
str1 = "0123456789"
print(str1[::-1]) # 9876543210 逆序
print(str1[-4:-1]) # 678 从倒数第四个开始输出,直到最后一个,但是左闭右开所以最后一个取不到
print(str1[-4:-1:-1]) # 从倒数第四个开始输出,逆序输出,选取的数是从左往右,步长方向是从右往左,所以不输出
字符串的常用操作
字符串的常用操作方法有查找、修改和判断三大类。
1、查找:
所谓字符串查找方法即是查找子串在字符串中的位置或出现的次数。
.find():检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则返回-1。
.index():检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则报异常。
补表:
① 语法:
字符串序列.find(或.index或.count)(子串,开始位置下标,结束位置下标)
注意:开始和结束位置下标可以省略,表示在整个字符串序列中查找。
② 实例:
mystr = "hello world i love you and i hate you"
# 1.find()
print(mystr.find('you')) # 19
print(mystr.find('you', 20, 40)) # 34
print(mystr.find('yous')) # -1 不存在返回-1
# 2.index()
print(mystr.index('you')) # 19
print(mystr.index('you', 20, 40)) # 34
print(mystr.index('yous')) # 报错 index函数子串不存在将直接报错
2、修改
所谓修改字符串,指的就是通过函数的形式修改字符串中的数据。
replace
① 语法:
字符串序列.replace(旧字符, 新字符, 替换次数)
注意:替换次数如果查出子串出现次数,则替代次数为该子串出现次数。
② 实例:
mystr = "hello world and itcast and itheima and Python"
mystr.replace('and', 'he')
print(mystr)
new_str = mystr.replace('and', 'he')
print(new_str)
replace函数有返回值,返回值是修改后的字符串,而不将原字符串进行改变。
说明了字符串是不可变数据类型
数据是否可以改变划分为 可变类型 和 不可变类型 之前字符串的强制定义也是如此。
mystr = "hello world and itcast and itheima and Python"
new_str = mystr.replace('and', 'he', 1)
print(new_str)
替换次数如果超出子串出现的次数, 表示替换所有这个子串。替换次数如果少于子串出现的次数, 则从字符串左边开始替换掉 替换次数数量 的子串。
split:
按照指定字符分割字符串
① 语法:
字符串序列.split(分割字符,num)
注意:num表示的是分割字符出现的次数,即 将来返回数据个数为 num+1 个。
返回一个列表,同时丢失分割字符。
② 实例:
mystr = "hello world and itcast and itheima and Python"
list1 = mystr.split(' ')
print(list1)
# 当分割字符填写空格的时候,会默认将所有单词进行分割
mystr = "hello world and itcast and itheima and Python"
list1 = mystr.split('and')
print(list1)
# Num不填默认将所有分割字符进行分割
mystr = "hello world and itcast and itheima and Python"
list1 = mystr.split('and', 1)
print(list1)
# 当num 小于分割字符出现次数的时候,从左边开始进行 num 次分割。
join:
.join():用一个字符或子串合并字符串,即是将多个字符串合并为一个新的字符串。
个人理解:利用字符或子串充当连接符,将零散的多字符串组成的序列合并成为一个新字符串
① 语法:
字符或子串.join(多字符串组成的序列)
合并列表里面你的字符串数据为一个大字符串
② 实例:
mylist = ['aa', 'bb', 'cc']
# aa...bb...cc
new_str = '...'.join(mylist)
print(new_str)
3.修改字符串大小
.capitalize():将字符串第一个字符转换成大写。
注意:capitalize()函数转换后,只字符串第一个字符大写,其他的字符全都小写。
Python 变成了 python hello 变成了 Hello
.title():将字符串每个单词首字母转换成大写。
.lower():将字符串中大写转小写。
.upper():将字符传中小写转大写。
4.删除空白字符
.lstrip(): 删除字符串左侧空白字符。
mystr = ' hello world and itcast and itheima and Python '
print(mystr)
new_str = mystr.lstrip()
print(new_str)
.rstrip(): 删除字符串右侧空白字符。
new_str = mystr.rstrip()
print(new_str)
.strip(): 删除字符串两侧空白字符。
new_str = mystr.strip()
print(new_str)
5.字符串对齐
.ljust():返回一个原字符串左对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
语法:
字符串序列.ljust(长度, 填充字符)
.rjust():返回一个原字符串右对齐,并使用指定字符(默认空格)填充至对应长度的新字符串,语法和.ljust()相同
.center():返回一个原字符串居中对齐,并使用指定字符(默认空格)填充至对应长度的新字符串,语法和ljust()相同。
并非绝对居中
6. 判断开头或结尾
所谓判断即是判断真假,返回的结果是布尔型数据类型:True 或 False。
•startswith(): 检查字符串是否以指定子串开头,是则返回True,否则返回False。
如果设置开始和结束位置下标,则在指定范围内检查。
- 语法:
字符串序列.startswith(子串,开始位置下标,结束位置下标) - 实例:
mystr = 'hello world and itcast and itheima and Python'
# 1.startswith()
print(mystr.startswith('hello')) #True
甚至在子串里面填写hel也能返回一个True值。
理所当然的,当子串为hels时返回一个False 值
•endswith():判断字符串是否以某个子串结尾
语法与startswith类似
print(mystr.endswith('Python')) # True
print(mystr.endswith('Pythons')) # False
•isalpha():如果字符串至少有一位字符并且所有字符都是字母则返回True,否则返回False。
•isdigit():如果字符串只包含数字则返回True否则返回False。
•isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。
•isspace():如果字符串中只包含空白,则返回True,否则返回False。
当然,这些字符串至少都要有一个字符
列表
列表的格式: [数据1,数据2,数据3,……]
列表可以一次性存储多个数据,且可以为不同数据类型。
当然,为了后期方便控制,尽可能存储相同数据类型的数据。
列表的常用操作
列表的作用是一次性存储多个数据,程序员可以对这些数据进行的操作有:增、删、改、查。
查找
下标:
• .index(): 返回指定数据缩在位置下标。
列表序列.index(数据,开始位置下标,结束位置下标)
注意:如果查找的数据不存在则报错。
如果只填写数据将默认从头开始查找到列表结束为止。
•.count():统计指定数据在当前列表中出现的次数。
注意:如果查找的数据不存在则返回0。
•.count():统计指定数据在当前列表中出现的次数。
注意:如果查找的数据不存在则返回0。
•.len():访问列表长度,即列表中的数据个数。
•in: 判断指定数据在某个列表序列,如果在则返回True,否则返回False。
•not in: 判断指定数据不在某个列表序列,如果不在返回True,否则返回False。
注意: in 和 not in 是一个公共操作,即列表,元组等都能够一同使用这个函数。
name = input("请输入您的邮箱账号名:")
name_list = ['tom', 'lily', 'rose']
if name in name_list:
# 提示用户名已经存在
print(f'您输入的名字是{name},此用户名已经存在')
else:
# 提示可以注册
print(f'您输入的名字是{name},可以注册')
增加
作用:增加指定数据到列表中。
•.append():列表结尾增加数据。
name_list = ['rose', 'lily']
print(name_list)
name_list.append('xiaoming')
print(name_list)
name_list.append([11,22])
print(name_list)
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20201002174419896.png#pic_center)
由此得:列表数据是可改的 – 列表可变类型。
append函数追加数据的时候如果数据是一个序列,追加整个序列到列表的结尾。
#### •extend(): 列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表。
列表序列.extend(数据)
```python
name_list = ['rose', 'lily']
print(name_list)
name_list.extend('xiaoming')
print(name_list)
备注:↑extend() 追加数据是一个序列,把数据序列里面的数据拆开然后逐一追加到列表的结尾。
name_list.extend(['xiaoming', 'arun'])
print(name_list)
注意这边extend(里面是一个列表),所以xiaoming 和 arun 没有分开来
注意! 添加的数据类型不能为int
•insert(): 指定位置新增数据。
列表序列.insert(位置下标,数据)
删除
•del 或 del()
del 目标
# 删除列表
name_list =['tom', 'lily', 'rose']
del name_list
print(name_list)
name_list =['tom', 'lily', 'rose']
del name_list[0]
print(name_list)
# ['lily','rose']
•pop(下标):删除制定下表的数据(默认为最后一个),并返回该数据
del_name = name_list.pop()
print(del_name) # rose
print(name_list) # ['tom', 'lily']
del_name = name_list.pop(1)
print(del_name) # lily
print(name_list) # ['tom', 'rose']
•remove(数据):移除列表中某个数据的第一个匹配项
name_list.remove('rose')
print(name_list)
•clear() – 清空
修改
•修改指定下标数据
1.利用列表下标进行数据的修改
a = ['tom', 'rose', 'lily']
# 1.修改指定下标的数据
a[0] = 'aaa'
print(a)
# ['aaa', 'rose', 'lily']
2.逆置: reverse():将原列表排序方式完全颠倒
a.reverse()
print(a)
b = [1, 3, 5, 2, 6, 9, 7, 8]
b.reverse()
print(b)
3. sort() 排序: 升序 和 降序
语法:
注意:以后的字典当中会用到这个key
Reverse表示排序规则,reverse = True 降序 ,reverse = False 升序(默认)
b.sort()
print(b)
b.sort(reverse=True)
print(b)
如果对于字符串使用sort(降序)则和使用 reverse()一样
复制
函数:copy()
b = [1, 3, 5, 2, 6, 9, 7, 8]
cc = b.copy()
print(cc)
print(b)
列表的循环遍历
需求:依次打印列表中的各个数据。
while
# 方法一
name_list = ['tom', 'lily', 'rose']
i = 0
while i < len(name_list):
print(name_list[i])
i += 1
# 方法二:
while name_list[i] in name_list:
print(name_list[i])
i += 1
if i == 3:
break
for
for i in name_list:
print(i)
列表的嵌套
所谓列表嵌套指的就是一个列表里面包含了其他的子列表。
应用:要储存班级一、二、三 三个班级学生姓名,且每个在这里插入代码片
班级的学生姓名在一个列表。
name_list = [['小明', '小红', '小绿'], ['tom', 'lily', 'rose'], ['张三', '李四', '王五']]
# 第一步:按下标查找到李四所在的列表
print(name_list[2])
# 第二步:从李四所在的列表里面,再按下标找到数据李四
print(name_list[2][1])
列表的总结
应用: 随机分配办公室
# 需求:8位老师,三个办公室 ,将8位老师随机分配到3个办公室
"""
步骤:
1. 准备数据
1.1 8位老师 -- 列表
1.2 3个办公室 -- 列表嵌套
2. 分配老师到办公室
*** 随机分配
就是把老师的名字写入到办公室列表 -- 办公室列表追加老师名字数据
3. 验证是否分配成功
打印办公室详细信息:每个办公室的人数和对应老师名字
"""
import random
# 1. 准备数据
teacher = ['AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH']
offices = [[], [], []]
# 2.分配老师到办公室 -- 取到每个老师放到办公室列表 -- 遍历老师列表数据
for name in teacher:
# 列表追加数据 -- append(选中) extend(会导致name分裂) insert(因为要随机插入,所以不能利用该函数,因为insert是指定位置插入)
# xx[0] -- 不能指定是某个具体下标 -- 随机
num = random.randint(0, 2)
offices[num].append(name)
print(offices)
print(teacher)
# 为了更贴合生活,把每个办公室子列表加了一个办公室编号 1,2,3
i = 1
# 3.检验是否分配成功
for office in offices:
# 打印办公室人数 -- 子列表数据的个数 len()
print(f'办公室{i}的人数是{len(office)}')
# 打印老师的名字
# print() -- 每个子列表里面的名字个数不一定 -- 遍历 -- 子列表
for name in office:
print(name)
i += 1
备注:
如果嫌弃在遍历办公室列表的时候输出每一遍,只需要取消print 的缩进即可化简为只输出1次。
错误示例:
- 将append写成了extend:
显然的,每次插入都是插入两个字符在同一个列表里面