内置方法
1.字符串的其他内置方法
1.移除字符串首尾的指定字符(可以选择方向)strip、lstrip、rstrip
eg:
ensample ='$$$tony$$$'
print(s1.strip('$')) # tony
print(s1.lstrip('$')) # tony$$$
print(s1.rstrip('$')) # $$$tony
其中: l= left 左边 , r=right 右边
2.大小写相关操作islower、isupper
eg:
ensample ='Tony'
print(ensample.lower()) 将所有的英文字母变为小写 tony
print(ensample.upper()) 将所有的英文字母变为大写 TONY
print(ensample.islower()) 判断字符串中所有的英文字母是否是纯小写 结果是布尔值
print(ensample.isupper()) 判断字符串中所有的英文字母是否是纯大写 结果是布尔值
ps:登录某一网址需要进行图片验证,如何实现?
eg:code = 'JaSOn6'
print('这是返回给用户的图片验证码:%s' % code)
user_code = input('请输入验证码>>>:').strip()
if code.lower() == user_code.lower(): 验证码忽略大小写 只需要统一转大写或者小写即可
print('验证码正确')
3.判定字符串的开头或者结尾是否是指定的字符startswith、endswith
判定开头:
s1 = 'Are you ready?'
print(s1.startswith'A') #True
print(s3.startswith('Are')) # True
print(s3.startswith('tony')) # False
判定结尾:
print(s3.endswith('y')) # True
print(s3.endswith('ready')) # True
print(s3.endswith('you')) # False
4.格式化输出format
方式一:占位符:%s %d
方式二:forma (共有四种方法)
1.跟占位符一样,使用{}占位
print('my name is {} my age is {}'.format('TONY', 18))
2.根据索引取值,并且取的值可以反复使用
print('my name is {0} {0} {0} my age is {0} {1}'.format('tony', 18))
3.指名道姓的方式取值,并且取的值可以反复使用
print('my name is {name} {name} my age is {age} {pwd}'.format(name='tony', age=18, pwd=123))
4.直接使用上述出现过的变量,前缀要+f'
name = 'tony'
age = 18
print(f'my name is {name} my age is {age} {name} {age}')
5.拼接字符串
s1 = '三月不努力 四月变垃圾'
s2 = '年少不努力 妄为少年人'
print(s1 + s2) # 如果字符串很大 加号效率较低
print(s1 * 10) # 重复次数
print('|'.join(s1)) # 三|月|不|努|力| |四|月|变|垃|圾
print('$'.join(['jason', 'kevin', 'justin', 'tony'])) # jason$kevin$justin$tony
'''join方法相当于是将括号内的元素进行for循环'''
# l1 = [11, 'jason', 'kevin'] #报错 (因为11不是字符串)
# print('|'.join(l1)) # join的元素必须都是字符串才可以 否则报错
6.替换字符串中指定的字符replace
# 用新的字符替换字符串中旧的字符
>>> str7 = 'my name is tony, my age is 18!' # 将tony的年龄由18岁改成73岁
>>> str7 = str7.replace('18', '73') # 语法:replace('旧内容', '新内容')
>>> str7
my name is tony, my age is 73!
# 可以指定修改的个数
>>> str7 = 'my name is tony, my age is 18!'
>>> str7 = str7.replace('my', 'MY',1) # 只把一个my改为MY
>>> str7
'MY name is tony, my age is 18!'
7.判断字符串中是否是纯数字isdigt
s7 = 'tony123'
print(s7.isdigit()) # False
print('123'.isdigit()) # True
print('123.21'.isdigit()) (中间有小数点也不算纯数字) # False
某网页注册手机号只能纯数字:
score = input('score>>>:')
if score.isdigit():
score = int(score)
else:
print('你他喵的能不能好好写')
2.字符串了解内置方法的操作
1.查找指定字符对应的索引值find,index
1.查找指定字符对应的索引值
s1 = 'jason justin kevin tony'
print(s1.find('s')) # 从左往右查找 查找一个就结束
print(s1.find('k', 1, 9)) # -1 意思是没有 找不到
print(s1.index('s'))
print(s1.index('k', 1, 9)) # 找不到直接报错 不推荐使用
2.文本位置改变center,ljsut,rjust,zfill
name = 'tony'
print(name.center(30, '-')) # -------------tony-------------
print(name.ljust(30, '*')) # tony**************************
print(name.rjust(30, '$')) # $$$$$$$$$$$$$$$$$$$$$$$$$$tony
print(name.zfill(50)) # zero 零 0000000000000000000000000000000000000000000000tony
3.特殊符号:斜杠与一些英文字母的组合会产生特殊的含义\t\n\a
print('ja\tson\nke\avin')
其中:\t:间隔四个空格 \n:换行 \a:添加符号
如果想取消它们的特殊含义 可以在字符串的前面加一个字母r'
print(r'ja\tson\nke\avin')
4.首字母大写,大小写反转,每个首字母大写captalize,swapcase,title
1 captalize:首字母大写
message = 'hello everyone nice to meet you!'
message.capitalize()
#Hello everyone nice to meet you!
swapcase:大小写翻转
message1 = 'Hi girl, I want make friends with you!'
message1.swapcase()
#hI GIRL, i WANT MAKE FRIENDS WITH YOU!
title:每个单词的首字母大写
msg = 'dear my friend i miss you very much'
msg.title()
#Dear My Friend I Miss You Very Much
3.列表的内置方法
1.类型转换
整型: print(list('11')) # 报错
浮点型: print(list('11.11')) # 报错
字符串型: print(list('Tony')) # ['T', 'o', 'n', 'y']
字典型: print(list({'name': 'jason', 'pwd': 123})) # ['name', 'pwd']
元组型: print(list((11,22,33,44,55))) # [11, 22, 33, 44, 55]
集合型: print(list({1, 2, 3, 4, 5})) # [1, 2, 3, 4, 5]
print(list(True))
"""
list可以转换支持for循环的数据类型
就是可以被for循环的数据类型
字符串 列表 字典 元组 集合
"""
2.索引取值
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
print(name_list[0]) #jason
print(name_list[-1]) #jerry
3.切片操作
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
print(name_list[1:4]) # ['kevin', 'tony', 'tom']
print(name_list[-4:-1]) # ['kevin', 'tony', 'tom']
4.间隔
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
print(name_list[0:4:1]) # ['jason', 'kevin', 'tony', 'tom']
print(name_list[0:4:2]) # ['jason', 'tony']
print(name_list[-1:-4:-1]) # ['jerry', 'tom', 'tony']
5.统计列表中元素的个数
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
print(len(name_list)) #5
6.成员运算
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
print('j' in name_list) # False
print('jason' in name_list) # True
7.列表添加元素的方式
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
1.尾部追加'单个'元素:
name_list.append('小李')
print(name_list) #['jason', 'kevin', 'tony', 'tom', 'jerry', '小李']
name_list.append([11, 22, 33, 44])
print(name_list)
['jason', 'kevin', 'tony', 'tom', 'jerry', [11, 22, 33, 44]]
2.指定位置插入'单个'元素
name_list.insert(0, 123)
#[123, 'jason', 'kevin', 'tony', 'tom', 'jerry']
3.合并列表
name_list.extend([11, 22, 33, 44, 55])
print(name_list)
#['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44, 55]
extend其实可以看成是for循环+append
for i in [11, 22, 33, 44, 55]:
name_list.append(i)
print(name_list)
ps: name_list += [11, 22, 33, 44, 55]
print(name_list) # 加号的效率不高
8.删除 修改 排序 翻转,比较运算,统计次数
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
一 删除
1.通用的删除方式: del name_list[0]
print(name_list)
#['kevin', 'tony', 'tom', 'jerry']
2.就地删除 # 指名道姓的直接删除某个元素
print(name_list.remove('jerry')) # None
# print(name_list)
3.延迟删除
print(name_list.pop()) # 默认是尾部弹出 jerry
print(name_list) #['jason', 'kevin', 'tony', 'tom']
print(name_list.pop(2)) # 还可以指定索引值 tony
print(name_list)
二. 修改
print(id(name_list[0])) # 2614038082368
name_list[0] = 'jasonDSB'
print(id(name_list[0])) # 2614038926320
print(name_list)
三. 排序
ss = [44, 77, 99, 11, 22, 33, 88, 66]
ss.sort() # 默认是升序
print(ss) # [11, 22, 33, 44, 66, 77, 88, 99]
ss.sort(reverse=True) # 可以修改尾降序
print(ss) # [99, 88, 77, 66, 44, 33, 22, 11]
四.翻转
ss = [44, 77, 99, 11, 22, 33, 88, 66]
ss.reverse() # 前后颠倒
print(ss)
五.比较运算
s1 = [11, 22, 33]
s2 = [1, 2, 3, 4, 5, 6, 7, 8]
print(s1 > s2) # True
"""列表在做比较的时候 其实比的是对应索引位置上的元素"""
六.统计列表中某个元素出现的次数
l1 = [11, 22, 33, 44, 33, 22, 11, 22, 11, 22, 33, 22, 33, 44, 55, 44, 33]
print(l1.count(11)) # 统计元素11出现的次数
l1.clear() # 清空列表
print(l1)
4.可变类型与不可变类型
可变数据类型:值发生改变时,内存地址不变,即id不变,证明在改变原值
不可变类型:值发生改变时,内存地址也发生改变,即id也变,证明是没有在改变原值,是产生了新的值
>>> x = 10
>>> id(x)
1830448896
>>> x = 20
>>> id(x)
1830448928
# 内存地址改变了,说明整型是不可变数据类型,浮点型也一样
>>> x = 10
>>> id(x)
1830448896
>>> x = 20
>>> id(x)
1830448928
# 内存地址改变了,说明整型是不可变数据类型,浮点型也一样
5.队列与堆栈
队列是一种先进先出的数据类型,它的跟踪原理类似于在超市收银处排队,队列里的的第一个人首先接受服务,
新的元素通过入队的方式添加到队列的末尾,而出队就是将队列的头元素删除。
我们可以设置一个类,用列表来存放栈中元素的信息,利用列表的append()和pop()方法可以实现队列的入队enqueue和出队dequeue的操作,
上面栈一个元素每次出去是列表的最后一个,直接用list.pop()出栈,而出队列每次是第一个,所以要用list.pop(0)出队列
# new_list = []
# 先进
# new_list.append(111)
# new_list.append(222)
# new_list.append(333)
# 先出
# for i in new_list:
# print(i)
# print(new_list.pop(0))
# print(new_list.pop(0))
# print(new_list.pop(0))
堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出。
我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的append()和pop()方法可以实现栈的出栈pop和入栈push的操作,list.append(obj)意思是向列表添加一个对象obj,list.pop(index=-1)意思是删除指定位置的对象,默认是最后一个对象,也就是说list.pop(),是删除列表中下标最大的元素。
new_list = []
# 先进
new_list.append(111)
new_list.append(222)
new_list.append(333)
# 后出
print(new_list.pop())
print(new_list.pop())
print(new_list.pop())