之前我们简单提到了字符串的格式化方法,现在我们将继续深入讨论其详细方法
更多详细字符串函数操作请参考 字符串函数操作大全
首先我们尝试通过下标赋值来修改更新字符串
str1 = "hello,world"
str1[1] = '0' #将str1中下标为1的字符改为o
输出结果:
Traceback (most recent call last):
File "C:\Users\admin\Desktop\new.py", line 2, in <module>
str1[1] = '0'
TypeError: 'str' object does not support item assignment
由此可见,字符串和列表不同,不能修改,通常称为字符串的不可变,如果要修改字符串,那么需要调用字符串内置的方法并且重新赋值
replace() 函数
描述:返回字符串str的副本,所有old子字符串被替换为new字符串。
语法:str.replace(old, new, count) -> str 返回字符串str的副本
程序示例:
s = "i love python python "
print(s.replace("o","w")) #默认字符串中的全部"o" 全部替换为"w"
print(s.replace("o","w",2)) #只替换掉前两个子字符串 "o"
print(s.replace("python","c++")) #子字符串可以是多个字符。
print(s.replace("python","c++",1))
运行结果:
i lwve pythwn pythwn
i lwve pythwn python
i love c++ c++
i love c++ python
描述:拆分字符串。通过指定分隔符sep对字符串进行分割,并返回分割后的字符串列表。
语法: str.split(sep=None, maxsplit=-1) -> list of strings 返回 字符串列表 或str.split(sep=None, maxsplit=-1)[n]
程序示例:
str1 = "i love python"
str2 = "https://www.baidu.com"
str3 = "scriptscript"
str4 = "i \n love \n python"
print(str1.split()) #默认空格分割。
print(str2.split(".")) #以"."为分隔符,maxsplit默认为-1
print(str2.split(".",-1)) #maxsplit为-1
print(str2.split(".",1)) #以"."为分隔符,分割一次。
print(str2.split(".")[1]) #分割后,输出列表中下标为1的元素
print(str3.split("<")[1].split(">")[0])
print(str4.split("\n")) #可用于去掉字符串中的"\n" "\t"等
运行结果:
['i', 'love', 'python']
['https://www', 'baidu', 'com']
['https://www', 'baidu', 'com']
['https://www', 'baidu.com']
baidu
i love python
['i ', ' love ', ' python']
描述:查找字符串中指定的子字符串sub第一次出现的位置,可以规定字符串的索引查找范围。若无则返回 -1。
语法:str.find(sub,start,end) -> int 返回整数
程序示例:
str = "i love python"
print(str.find("o")) #索引子字符串"o"
print(str.find("0",4)) #索引起始位置为4 索引范围为:ve python
print(str.find("o",4,12)) #索引起始位置为4,结束位置为12 索引范围为:ve pytho
print(str.find(""))
print(str.find(" ")) #返回第一个空格出现的位置。
print(str.find("k")) #索引子字符串"k",不存在,返回-1
运行结果:
3
-1
11
0
1
-1
在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:
程序示例:
print('this\tis\ta\tapple') #制表符
print('this\\tis\\ta\\tapple') #转义反斜杠
print('python\ngood') #换行符
print('python\\good') #转义反斜杠
print('what\'s your name') #取消单引号
print(r'this\tis\ta\tapple') #以原格式输出
运行结果:
this is a apple
this\tis\ta\tapple
python
good
python\good
what's your name
this\tis\ta\tapple
encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为“编码”。
encode() 方法的语法格式如下:
str.encode([encoding="utf-8"][,errors="strict"])
注意,格式中用 [ ] 括起来的参数为可选参数,也就是说,在使用此方法时,可以使用 [ ] 中的参数,也可以不使用。
注意,使用 encode() 方法对原字符串进行编码,不会直接修改原字符串,如果想修改原字符串,需要重新赋值。
程序示例:
print('落空空'.encode('utf-8'))
print('落空空'.encode('gbk'))
运行结果:
b'\xe8\x90\xbd\xe7\xa9\xba\xe7\xa9\xba'
b'\xc2\xe4\xbf\xd5\xbf\xd5
decode()
和 encode() 方法正好相反,decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”。
decode() 方法的语法格式如下:
bytes.decode([encoding="utf-8"][,errors="strict"])
str1 = '落空空'.encode('utf-8')
print('落空空'.encode('utf-8'))
print(str1.decode('utf-8'))
运行结果:
b'\xe8\x90\xbd\xe7\xa9\xba\xe7\xa9\xba'
落空空
程序实例:
str1 = 'this Is a Apple'
str2 = ' python '
print(str1.upper()) #全变成大写
print(str1.lower()) #全变成小写
print(str1.capitalize()) #首字母大写
print(str1.title()) #标题形式,单词字母大写
print(str2.strip()) #去掉两边空格
print(str2.rstrip()) #去掉右边空格
print(str2.lstrip()) #去掉左边空格
运行结果:
THIS IS A APPLE
this is a apple
This is a apple
This Is A Apple
python
python
python
字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。
比如有份成绩表数据,语文:79,数学:80,英语:92,这组数据看上去像两个列表,但这两个列表的元素之间有一定的关联关系。如果单纯使用两个列表来保存这组数据,则无法记录两组数据之间的关联关系。
为了保存具有映射关系的数据,Python 提供了字典,字典相当于保存了两组数据,其中一组数据是关键数据,被称为 key;另一组数据可通过 key 来访问,被称为 value。形象地看,字典中 key 和 value 的关联关系如下图所示:
由于字典中的 key 是非常关键的数据,而且程序需要通过 key 来访问 value,因此字典中的 key 不允许重复。
程序既可使用花括号语法来创建字典,也可使用 dict() 函数来创建字典。实际上,dict 是一种类型,它就是 Python 中的字典类型。
在使用花括号语法创建字典时,花括号中应包含多个 key-value 对,key 与 value 之间用英文冒号隔开;多个 key-value 对之间用英文逗号隔开。
程序实例:
scores = {'语文': 89, '数学': 92, '英语': 93}
print(scores)
empty_dict = {} # 空的花括号代表空的dict
print(empty_dict) # 使用元组作为dict的key
dict2 = {(20, 30):'good', 30:'bad'}
print(dict2)
运行结果:
{'语文': 89, '数学': 92, '英语': 93}
{}
{(20, 30): 'good', 30: 'bad'}
需要指出的是,元组可以作为 dict 的 key,但列表不能作为元组的 key。这是由于 dict 要求 key 必须是不可变类型,但列表是可变类型,因此列表不能作为元组的 key。
程序实例:
dict1 = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
print(dict1['ob1']) #通过key来访问value
print(dict1['ob4']) #如果用字典里没有的键访问数据,会输出错误
for key in dict1: #访问所有值
print(key,dict1[key])
运行结果:
computer
Traceback (most recent call last):
File "C:\Users\admin\Desktop\new.py", line 3, in <module>
print(dict1['ob4']) #如果用字典里没有的键访问数据,会输出错误
KeyError: 'ob4'
ob1 computer
ob2 mouse
ob3 printer
程序实例:
dict1 = {'ob1':'computer', 'ob2':'mouse'}
dict2={'ob3':'printer'}
dict1.update(dict2) #update()方法可以用来将一个字典的内容添加到另外一个字典中
print(dict1)
dict1['ob4'] = 'book' #对不存在的key赋值,也属于字典的更新修改
print(dict1)
运行结果:
{'ob1': 'computer', 'ob2': 'mouse', 'ob3': 'printer'}
{'ob1': 'computer', 'ob2': 'mouse', 'ob3': 'printer', 'ob4': 'book'}
程序实例:
dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
del dict['ob1'] #能删单一的元素
print(dict)
dict1={'ob1':'computer','ob2':'mouse','ob1':'printer'}
dict1.clear() #删除字典中所有元素
print(dict1)
dict1 = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
del dict1 #删除整个字典,删除后访问字典会抛出异常
print(dict1)
dict1 = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
dict1.pop('ob1') #删除指定key对应的value
print(dict1)
dict1.popitem() #随即删除键值对
print(dict1)
运行结果:
{'ob2': 'mouse', 'ob3': 'printer'}
{}
Traceback (most recent call last):
File "C:\Users\admin\Desktop\new.py", line 11, in <module>
print(dict1)
NameError: name 'dict1' is not defined
{'ob2': 'mouse', 'ob3': 'printer'}
{'ob2': 'mouse'}
1.集合是一个可变容器
2.集合内的数据对象都是唯一的(不能重复)
3.集合是无序的存储结构,集合内的数据没有先后关系
4.集合是可迭代对象
5.集合相当于是只有键没有值得字典(键就是集合中的数据)
6.集合内的元素是不可变的
注意:当集合内有重复元素时,输出集合会自动将重复元素去掉
程序实例:
s = {1,2,3,1,2,3,4,5} #注意这里运行后无重复
print(s)
print(type(s)) #集合类型
s1 = {1}
print(s1)
运行结果:
{1, 2, 3, 4, 5}
<class 'set'>
{1}
程序实例:
s1 = {1,2,3}
s2 = {2,3,4}
s3 = s1 & s2
print(s3)
运行结果:
{2, 3}
程序实例:
s1 = {1,2,3}
s2 = {2,3,4}
s3 = s1 | s2
print(s3)
运行结果:
{1, 2, 3, 4}
程序实例:
s1 = {1,2,3}
s2 = {2,3,4}
s3 = s1 - s2
print(s3)
运行结果:
{1}
add()
程序实例:
set1 = {1,2,3,4,5}
set1.add(6) #添加新元素
print(set1)
set1.add(1) #添加已有元素不变
print(set1)
运行结果:
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}
update()
程序实例:
set1 = {1,2,3,4,5}
set1.update('6') #不能直接添加数字类型,因为数字类型不可迭代
print(set1)
set1.update('abc')
print(set1)
set1.update([1,7,8,9])
print(set1)
运行结果:
{1, 2, 3, 4, 5, '6'}
{1, 2, 3, 4, 5, 'b', 'a', '6', 'c'}
{1, 2, 3, 4, 5, 'b', 'a', 7, 8, 9, '6', 'c'}
程序示例:
set1 = {1,2,3,4,5}
set1.pop() #随机删除一个元素,将元素值返回
print(set1)
set1.remove(2) #指定删除一个元素,找不到就会报错
print(set1)
set1.clear() #清空整个集合
print(set1)
del set1 #删除整个集合
print(set1)
运行结果:
{2, 3, 4, 5}
{3, 4, 5}
set()
Traceback (most recent call last):
File "C:\Users\admin\Desktop\new.py", line 9, in <module>
print(set1)
NameError: name 'set1' is not defined
由于集合是无序的又没有索引,所以查询集合元素只有一种,那就是循环,如下:
程序实例:
set1 = {1,2,3,4,5}
for s in set1:
print(s)
运行结果:
1
2
3
4
5
程序实例:
set1 = {1,2,3}
set2 = {'a','b','c'}
set3 = {1,2,'a'}
print(set1.isdisjoint(set2)) #没有交集返回Ture
print(set1.isdisjoint(set3)) #有交集返回False
print(set1.issubset(set2)) #判断集合1是否包含于集合2 包含返回Ture
print(set1.issubset(set3)) #判断集合1是否包含于集合3 不包含返回False
运行结果:
True
False
False
False
1、 找出两个列表中相同元素,并打印出来
2、统计一串字符中,每个字母 a~z的出现次数,忽略大小写
3、利用26个字母和10个数字,随机生成10个8位密码
4、判断用户输入的是不是一个手机号码,并且是不是以13开头的手机号
1.for循环99乘法表
#for循环九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print(f'{j}x{i}={i*j}',end='\t')#可以使用多种格式化方式这只是其中一种
j += 1
print()
i += 1
运行结果:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
2、一个列表中有重复元素,编写程序,移除重复元素
列表:li = [1,1,1,2,2,3,3,3,3,3,3,4,4,5,6,5,6]
方法1:
#方法一
li = [1,1,1,1,1,2,2,2,3,3,3,3,4,4,5,6,5,6]
for i in li.copy():
if li.count(i) > 1:
li.remove(i)
print(li)
运行结果:
[1, 2, 3, 4, 5, 6]
方法2:
#方法二
li = [1,1,1,1,1,2,2,2,3,3,3,3,4,4,5,6,5,6]
li1 = []
for i in li:
if i not in li1:
li1.append(i)
print(li)
print(li1)
运行结果:
[1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 6, 5, 6]
[1, 2, 3, 4, 5, 6]