python容器--字符串

容器

为什么要学习容器类型? 容器类型有什么用?

之前学习的变量类型都只能存储单一元素, 如果我要存储全班100个学生的成绩, 需要定义100个变量. 将所有的元素放在同一个容器中, 一个容器变量就可以存储多个元素. 减少了变量的定义.

为什么容器类型提供了多个类型?

每种容器针对了不同的使用场景, 有的容器方便操作、有的容器查询效率比较高、有的元素可以保证元素唯一、有的元素可以保证数据只读等等. 学校就是一个容器, 学校有多种, 有学习动漫的、有学习IT编程的、有学习英语的等等, 虽然都是学校但是所做的事情不同

容器分类?

为了便于学习, 我们根据不同容器的特性, 将常用容器分为序列式容器和非序列式容器.

  1. 序列式容器中的元素在存放时都是连续存放的, 也就是序列式容器中, 除了第一个元素的前面没有元素, 最后一个元素的后面没有元素, 其他所有的元素前后都有一个元素. 包括字符串、列表、元组.

  2. 非序列式容器在存储元素时不是连续存放的, 容器中的任何一个元素前后都可能没有元素. 包括字典、集合.

在这里插入图片描述

什么是索引?

在序列式容器中, 会给每一个元素赋予一个编号, 该编号从 0 开始计算. 第一个元素的索引为 0, 第二个元素为 1, 以此类推, 支持索引的容器可以使用 0 1 … 来获得某个位置的元素.

什么是切片?

通过索引可以获取序列式容器中的某个元素, 切片语法主要用于获得一个指定索引区间的多个元素, 例如获取从索引值为 0 到索引值为 5 之间的所有元素.

字符串

如何定义字符串?
  1. 字符串使用一对单引号来定义.

  2. 字符串使用一对双引号来定义.

  3. 字符串使用一对三引号来定义.

str1 = '123'
str2 = "123"

# 多行字符串
str3 = 
"""
123345
123
"""

一般我们在定义字符串时候, 使用两个单引号或者两个双引号, 很少使用三引号.

字符串遍历

字符串属于序列式容器, 支持依据索引的操作.
在这里插入图片描述

我们可以使用 while 循环来访问字符串容器中的每一个字符元素.

my_string = '我叫陈先生,我今年3岁了!'
i = 0
# len()函数获取字符串的最大下标
while i < len(my_string):
 print(my_string[i], end=' ')
 i += 1

【注意】序列式容器的索引都是以 0 开始的**,** 并不是从 1 开始**.**

还可以使用python提供的for循环遍历,代码更简洁

my_string = '我叫陈先生,我今年3岁了!'

# ch是自己起的名字,in 后面跟的是我们要遍历的变量
for ch in my_string:
 print(ch, end=' ')
字符串替换
poetry = 'a Love You'

我想把上面的 " a " 替换成 “I” ,使用字符串的 replace 方法完成上面两步.

我们可以指定第三个参数, 替换多少次.

poetry = 'a Love You a'
right_poetry = poetry.replace('a', 'I')
# 只替换第一次出现的 'a'
right_poetry = poetry.replace('a', 'I', 1)

字符串的特点:python中字符串不允许替换,这里的替换是返回了一个新的字符串,如下代码执行会报错

my_str = 'abcd'
my_str[0] = 'Q'
print(my_str)
字符串查找和切片

现在有一邮箱地址如下:

user_email = '123456@qq.com'

我们希望从邮箱地址字符串中获取用户名和邮箱后缀名, 那么这个问题如何解决?

  1. @符号之前为用户名, @符号之后的内容为邮箱后缀名.

  2. 首先获得 @ 符号的位置, 从开始位置截取到 @ 符号位置, 即可获得用户名.

  3. 从 @ 符号位置开始截取到字符串最后, 即可获得邮箱后缀名.

如何获得 @ 符号的位置?

使用字符串提供的 find 方法, 该方法可返回查找字符串第一次出现的位置, 查找字符串不存在则会返回-1.

备注**😗* find 方法默认从字符串开始位置(0位置)开始查找, 我们也可以指定从哪个位置范围开始查找, 设置 find 的第二个参数表示从哪个位置开始查找, 第三个参数, 表示查找结束位置

user_email = '123456@qq.com'
# 从 0 位置开始查找 '@',还可以有第三个参数指定查找到第几位
position = user_email.find('@', 0)

如何获得指定范围的字符串?

字符串属于序列式容器, 可以根据索引获得某一个字符, 也可以根据由两个索引标识的区间获得区间内的字符序列

user_email = '123456@qq.com'
# 从 0 位置开始查找 '@'
position = user_email.find('@', 0)

# 从下标0开始,下标6之前,不包含6
print(user_email[0: 6])   # 123456

# 起始位置不写, 默认就是0
print(user_email[: 6])    # 123456

# 从0位置开始到最后
print(user_email[0: ])    # 123456@qq.com

# 步长, 每隔2个字符选取一个字符, 组成一个序列
print(user_email[0: 6: 2])   # 135

# 如果步长为负数, 那么起始位置参数和结束位置参数就会反过来.
print(user_email[6:: -1])    # @654321

# 位置也可以使用负数
print(user_email[-3: -1])   # co
print(user_email[-3:])      # com
print(user_email[::-1])     # moc.qq@654321

下面我们看看如何解决这个问题?

user_email = '123456@qq.com'

# 查找 @ 位置
position = user_email.find('@')

# 根据 postion 截取用户名和邮箱后缀
user_name = user_email[: position]

mail_suffix = user_email[position + 1:]

另外一种解决该问题的思路.

  1. 先根据 @ 符号将邮箱分割成两部分.

  2. 分别获取每一部分, 即可得到用户名和邮箱后缀.

user_email = '123456@qq.com'

# 判断 user_email 是否有多个 @
at_count = user_email.count('@')

if at_count > 1:
 print('邮箱地址不合法, 出现了多个@符号!')
else:
 # 根据 @ 将字符串截取为多个部分
 result = user_email.split('@')
 # 输出用户名和邮箱后缀
 print(result[0], result[1])
去除两侧空格、是否为字母

我们经常在各个网站进行会员注册, 一般注册的处理流程如下:

  1. 获得用户输入的注册用户名.

  2. 用户在输入用户名时, 可能在用户名两个不小心输入多个空格. 我们需要去除用户名两侧的空格.

  3. 判断用户名是否全部为字母(用户名的组成由我们来规定, 这里我们规定必须是字母)

  4. 处理完毕之后, 显示注册成功.

去除空格.strip(),判断是否都是字母isalpha

# 获得用户注册用户名
register_username = input('请输入您的用户名:')

# 去除用户名两侧的空格
register_username = register_username.strip()

# 判断字符串是否全部为字母
if register_username.isalpha():
 print('恭喜您:', register_username, '注册成功!')
else:
 print('注册失败!')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值