python容器--字符串

Posted 眰恦ღ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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('注册失败!')

以上是关于python容器--字符串的主要内容,如果未能解决你的问题,请参考以下文章

python容器--字符串

基本数据类型—列表

python之迭代器

Python 输入全班30名学生的姓名和成绩,输出其中的最高分和最低分,并求全班同学的(要求使用字典)

python 从字符串中解析xml

哪些车一起租了多少次? MySQL和python哪个更容易做?