字符串,列表的内置方法
本章内容
- 字符串的其他内置方法
- 列表内置方法
- 可变类型与不可变类型
- 队列与堆栈
字符串的其他内置方法
1.移除字符串首尾的指定字符,可以选择方向 eg:
s = '$$$$username$$$$'
print(s.strip('$')) # username
print(s.lstrip('$')) # username$$$$
print(s.rstrip('$')) # $$$$username
2.大小写相关的操作 eg:
s = 'TonytonY'
print(s.lower()) # tonytony
print(s.upper()) # TONYTONY
# 判断字符串内的所有英文是不是纯小写
print(s.isupper()) # Flase
# 判断字符串内的所有英文是不是纯小写
print(s.isupper()) # Flase
# 文字验证码的原理:
real_tetx = 'Alex'
text = input('输入您的验证码>>>:').strip()
if real_text.isupper() == text.isupper:
print('输入正确')
# 其实就是统一转换为大写或者小写,然后进行校验
3.判断字符串的开头或者结尾是否有指定的字符 eg:
s = 'jason tony 老刘'
print(s.startswith('j')) # True
print(s.endswith('老刘')) # True
print(s.startswith('jason')) # True
4.格式化输出的传统方式和四种玩法 eg:
# 传统方式
s = my name is %s my age is %d
print(s % ('tony', 18))
# 玩法一:
s = 'my name is {} my age is {}'
print(s.format('jsaon', 18))
# 玩法二:
s = 'my name is {0} {0} {0} my age is {1}'
print(s.format('tony', 10))
# 玩法三:
s = 'my name is {name}{name} my age is {age}'
print(s.format(name='tony', age=19))
# 玩法四:
name = 'tony'
age = 99
print(f'my name is {name} my age is {age}')
5.拼接字符串 eg:
s1 = 'abcd'
s2 = 'efgh'
print(s1 + s2) # abcdefgh
print(s1 * 10) # abcdabcdabcdabcdabcd
print('|'.join(s1)) # a|b|c|d
print("$".join(['ab', 'cd', 'ef', 'gh']))
# ab$cd$ef$gh
"""
join方法相当于把数据内的元素做了一次for循环,每次循环便加入拼接的字符
"""
s = [22, 'tony', 'tom', 'jerry']
print('$'.join(s))

# 如果拼接了不是字符串类型的数据,则会报错,如上图所示:
# 所以join拼接的元素必须都是字符串
6.替换字符串中指定的字符 eg:
# 默认替换一次性替换一个元素的所有相同元素
s = 'tom tom kevin jerry marie lukas kevin'
print(s.replace('tom', 'jerry'))
s = 'tom tom kevin jerry marie lukas kevin'
print(s.replace('tom', 'tony',1))
# 替换顺序默认从左往右
7.判断字符串中是否是纯数字 eg:
s = 'tony999'
print(s.isdigit()) # Flase
s = '123456'
print(s.isdigit()) # True
score = input('score>>>:')
if score.isdigit():
score = int(score)
print(score)
else:
print('好好写')

"""################必会操作####################"""
1.查找指定字符所对应的索引值
s = 'my name is tony'
print(s.find('n')) # 打印3
# 此处没有打印tony所在的n的索引,因为find查找是从左向右,找到一个就结束
# 也可以定义查找的范围:
print(s.find('a', 5, 8)) # # 打印-1,意思是没有找到
print(s.index('a', 5, 8)) # 直接报错,平常不建议使用
2.文本位置的改变 eg:
s = 'username'
print(s.center(30,'-')) # -----------username-----------
print(s.ljust(30, '-')) # username----------------------
print(s.rjust(30, '-')) # ----------------------username
print(s.zfill(40)) # 00000000000000000000000000000000username
3.特殊符号:斜杠与一些英文字母的组合会产生特殊的含义
print('my name is tony\nmy age is 18')

print('my name \ais tony\nmy age\t is 18')

# 如果要取消效果,可以在前面加一个字母r eg:

4.capitalize,swapcase,title的用法
4.1 capitalize: 首字母大写 eg:
text = 'I am a STUDENT'
print(text.capitalize()) # I am a student
4.2 swapcase 字母大小写反转 eg:
print(text.swapcase()) # i AM A student
4.3 title: 全部首字母大写 eg:
print(text.title()) # I Am A Student
列表内置方法
1.类型转换 eg:
"""列表内是整型和浮点型以及布尔值不可以转换,如下:"""

1.1 字符串转换:
print(list('my name')) # ['m', 'y', ' ', 'n', 'a', 'm', 'e']
1.2 字典的转换:
print(list({'name':'tony','age':18})) # ['name', 'age']
1.3 元组的转换:
print(list((1,2,3,4,5))) # [1, 2, 3, 4, 5]
1.4 集合的转换:
print(list({1,2,3,4,5,5,'tony'})) # [1, 2, 3, 4, 5, 'tony']
"""
由上述可以得出:只要可以进行for循环的数据类型都可以进行列表的转换
"""
2. 常见操作如下图:

3. 间隔:

4.统计列表中元素的个数:
name_list = ['name', 'age', 'gender', 18]
print(len(name_list)) # 4
5. 成员运算
"""最小的判断条件是单个元素,而不是元素中的字符"""
name_list = ['name', 'age', 'gender', 18]
print('name' in name_list) # True
name_list = ['name', 'age', 'gender', 18]
print('n' in name_list) # False
6. 列表添加元素的方式
6.1 尾部追加'单个'元素:
name_list = ['name', 'age', 'gender', 18]
name_list.append('小王')
print(name_list) # ['name', 'age', 'gender', 18, '小王']
name_list.append(['小王'])
print(name_list) # ['name', 'age', 'gender', 18, ['小王']]
6.2 指定位置添加'单个'元素:
name_list.insert(3,'小王')
print(name_list) # ['name', 'age', 'gender', '小王', 18]
6.3 合并列表:
age_list = [18, 15, 16]
name_list.extend(age_list) # 第一种
name_list += age_list # 第二种
print(name_list) # ['name', 'age', 'gender', 18, 18, 15, 16]
# 加号的效率不高
"""extend可以看成是for循环+append"""
eg:
for i in age_list:
name_list.append(i)
print(name_list)
7. 删除元素
7.1 通用的删除方式
name_list = ['name', 'age', 'gender', 18]
del name_list[0]
print(name_list) # ['age', 'gender', 18]
7.2 就地删除的方式
name_list.remove('name')
print(name_list) # ['age', 'gender', 18]
7.3 延迟删除
name_list.pop()
print(name_list) # ['name', 'age', 'gender']
# pop() 也可以指定索引值
name_list.pop(2)
print(name_list) # ['name', 'age', 18]
8. 修改元素列表
name_list[1] = 'male'
print(name_list) # ['name', 'male', 'gender', 18]
# 修改改变的是索引为1的内存地址,并不是anme_list的内存地址 eg:
print(id(name_list[1])) # 2085094278120
name_list[1] = 'male'
print(id(name_list[1])) # 2085095121448
9. 排序
s = [11, 66, 33, 22, 55,88]
s.sort()
print(s) # [11, 22, 33, 55, 66, 88]
# 修改尾序
s.sort(reverse=True)
print(s) # [88, 66, 55, 33, 22, 11]
10.反转
s.reverse()
print(s) # [88, 55, 22, 33, 66, 11]
11.比较运算
s = [11, 12, 34, 33]
s2 = [2, 3, 4]
print(s > s2) # True 只比较第一个元素,如果是字符,则转换为字符所构成的数字进行比较,比较就是比较索引位置上的元素 eg:
s1 = ['A', 'B', 'C'] # A>>>65
s2 = ['a', 'b'] # a>>>97
print(s1 > s2) # False
12.统计列表中元素出现的个数
l = ['jason','jason','jason','tony','tom','tom']
print(l.count('jason')) # 3
13. 清空列表
l.clear()
print(l) # []
可变类型与不可变类型
"""
可变类型与不可变类型
可变类型 列表
值改变 内存地址不变 修改的是本身
不可变类型 字符串
值改变 内存地址肯定遍 修改过程产生了新的值
如何查看变量的'内存地址'
"""
# 话不多说,直接画解析图:

# 如果改变的是列表中一个元素的值,那么这个列表本身的内存地址没有改变,改变的是索引对应的内存地址,所以列表是一个可变的数据类型
# 如果改变的是一个字符串的值,那么它会生成新的内存地址,原来的内存地址不变,所以字符串是不变的数据类型,如图:

# 代码体现:
s = '%%%tony%%%'
print(s.strip('%')) # s.strip(%)是新的值 tony
print(s) # %%%tony%%% 原来的内存地址不变
队列与堆栈
# 队列:先进先出 eg:超市排队结账 符合队列的特征
# 堆栈:先进后出 eg:叠衣服 符合堆栈的特征
#列表模拟队列与堆栈
s = []
s.append('tony')
s.append('tom')
s.append('jerry')
for i in s:
print(i)
# 打印结果:
# tony
# tom
# jerry
# 堆栈
s = []
s.append('tony')
s.append('tom')
s.append('jerry')
print(s.pop())
print(s.pop())
print(s.pop())
# 打印结果为:
# jerry
# tom
# tony
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构