str内置函数
一、查找类函数
- find函数: 在原字符串寻找一个子字符串,返回第一次发现这个字符串的位置,可选定索引区间(rfind为从右往左找,lfind为从左往右找)
s = "Zhangchun is a silly boy, but Zhangchun is a cool boy"
s1 = "Zhangchun"
s3 = "Liyu"
s.find(s1) #结果为0,是从0开始索引且为第一个"Zhangchun"
s.find(s1,26,99) #结果为30,为第二个"Zhangchun"
s.find(s2) #结果为-1,表示未找到子字符串
- index函数: 同上
s = "Zhangchun is a silly boy, but Zhangchun is a cool boy"
s1 = "Zhangchun"
s2 = "Liyu"
s.find(s1) #结果为0,是从0开始索引且为第一个"Zhangchun"
s.find(s1,26,99) #结果为30,为第二个"Zhangchun"
s.find(s2) #结果为ValueError,表示未找到子字符串
find与index函数的不同是未找到子字符串的反应不同
二、判断类函数
- islower/isupper:判断是否为大写或者小写。空格、数字、标点不影响。但是汉字无大小写,所以为False。
l = "Liyu is a handsome boy"
l2 = "liyu is a handsome boy"
l3 = "LIYU IS A HAND SOME BOY "
l4 = "111liyu is a handsome boy ? yes!"
l5 = "李彧是一个帅气的男孩"
l1.islower() #False
l2.islower() #True
l3.isupper() #True
l4.islower() #True
l5.islower() #False
l5.isupper() #False
- isalpha:判断字符串是否为字母。前提至少包含一个字符,不然返回False,不能有空格、数字、符号、汉字之类的定西。必须为一串连续的字母串。
l1 = "Liyu is a cruel bot" #False
l2 = "Liyuisacruelbot" #True
l3 = "L123isda" #False
l4 = "asdkaosdk." #False
#lx.isalpha()来判断
- startswith/endswith:检测字符串是否以某个子串开头。
S.startswith(prefix[, start[, end]])
S.endswith(suffix[, start[, end]])
prefix为前缀、suffix为后缀。start与end表示选定区间的开始与结束。
l1 = "Zhangchun is a silly boy, and a cool boy"
l1.startswith("Zhangchun")
l1.endswith("boy")#上面两个都为True
l1.endswith("coolboy")#False,cool boy而非coolboy
- isdigit/isnumeric/isdecimal:三个判断数字的函数。但不建议使用。
三、操作类函数
- strip:通常用来删除字符串两边空格。也可以删除字符串两边被定义的字符。删除的是从头开始符合条件的连续字符。lstrip和rstrip是把左边或右边的空格或同样的字符删除。
l = " liyuaaaaa aaa aa bb cc liyu "
l.strip() #结果就两边空格删除
l2 = "liyuaaaaa aaa aa bb cc liyu"
l2.strip("liyu") #结果就为aaaaa aaa aa bb cc
- join:对字符进行拼接。
l1 = "love"
l = ["liyu ", "a uncertain people ", "yourself"]
l1.join(l) #结果为liyu love a uncertain people love youself
列表
一组有序数列做成的序列。数据有顺序,且可以不为同一个类型。
0.一些内置函数
id:显示变量的id
type:显示变量的类型
1.列表的创建
#直接创建,用中括号创建
l = [1,2,3,4,5]
#直接赋值创建列表
l2 = list()
#包含单个字符串的特例
l3 = "li yu"
l4 = list(l3)
print(l4) #结果为['l', 'i', ' ', 'y', 'u']
#这时候直接创建列表就可以了
2.列表的访问
使用下标操作,也叫做索引。列表的索引是从0开始的。
l = [1,2,3,4,98498,4845,1231,489]
print(l[7]) #结果就为489
#indexerror出现的原因,访问超过了其下标
print(l[9])
3.列表的切片
对列表进行任意一段的截取,从0开始且左包括又不包括,截取之后为一个新的列表 。(可以用id函数鉴别)
l = [45,9845,15,498,4165,48,1333]
print(l[2:6]) #结果为[15, 498, 4165, 48]
#切片下标可以为空
print(l[2:]) #从下标3到最后,[15,498,4165,48,1333]
print(l[:6]) #从下标0到下标5,[45,9845,15,498,4165,48]
print(l[:]) #[45,9845,15,498,4165,48,1333]
#切片可以超出范围,超出后不再考虑多余下标内容,不会出现indexerror
#切片可以控制步幅,步幅默认为1
print(l[::2]) # [45,15,4165,1333]
#下标值、步幅可以为负数
#下标值为负数是你自己表示从右往左数,最右边数字的下标为-1,但系统还是从左往右移动
#步幅为负数表示从右往左移动
print(l[-5:-1]) #结果为[15,498,4165,48]
print(l[-2:-6:-1]) #结果为[48,4165,498,15]
4.删除:del
#del删除
#如果删除之后为一个为一个新的id,说明生成了一个新的list
l = [5,22,7796,12,456]
print(id(l))
print(l)
del l[3]
print(id(l))
print(l)
#del一个变量后不能继续使用这个变量
del l
print(l)
'''结果为
2125021515592
[5, 22, 7796, 12, 456]
2125021515592
[5, 22, 7796, 456]
NameError
'''
5.列表的加法和乘法
#列表加法
q1 = [2,3,4]
q2 = [7,9,10]
q3 = ["liyu","haungjunhua","zhangchun"]
q4 = q1 + q2 + q3
print(q4)
#结果为[2, 3, 4, 7, 9, 10, 'liyu', 'haungjunhua', 'zhangchun']
#列表乘法,相当于把n个列表连接在一起
c = [7,6,5]
c2 = c * 5
print(c2)
#结果为[7, 6, 5, 7, 6, 5, 7, 6, 5, 7, 6, 5, 7, 6, 5]
6.列表的遍历
- for循环
e = ["LiuYing", "Loves", "Wang Xiaojing", "forever"]
for i in e:
print(i)
'''结果为
LiuYing
Loves
Wang Xiaojing
forever
'''
#in后面元素应该是可迭代的,如range
- while循环
#while,但一般不用
s = [9,87,6,54,3,21]
length = len(s) #长度为6
print(length)
indx = 0 #表示list的下标,从0开始
while index < length:
print(s[indx])
indx += 1
'''结果为
6
9
87
6
54
3
21
'''
7.双层列表循环变异
#d为双层列表,或嵌套列表
d = [["ha",1],["he",2],["xi",3]]
for k,v in d:
print(k, "--", v)
#k,v,w个数应该和解包出来的变量个数一致
d3 = [["ha",1,4],["he",2,3],["xi",3,7]]
for k,v,w in d3:
print(k, "--", v, "--", w)
#双层列表变异
d2 = [["ha",1,4,6],["he",2,3],["xi",3,7,5,4]]
for k,v in d2:
print(k, "--", v)
'''结果为
ha -- 1
he -- 2
xi -- 3
ha -- 1 -- 4
he -- 2 -- 3
xi -- 3 -- 7
ValueError
'''
8.列表内涵: 通过简单函数创建列表
#for创建
a = [1,2,3,4,5,6]
b = [i for i in a] #含义是对于a中所有元素放入b中
print(b)
#对于a中所有元素乘10
c = [i * 10 for i in a]
print(c)
#还可以过滤原来list中的元素放入新的列表中,如将a中偶数放入新列表中
#用条件语句
d = [i for i in a if i % 2 ==0]
print(d)
#列表生成嵌套
x = [s for s in range(1,4)]
y = [s for s in range(100,400) if s % 100 ==0]
print(x)
print(y)
g = [m + n for m in x for n in y]
print(g)
#等价于for循环嵌套
for j in x:
for k in y:
print(j + k, end=" ")
'''结果为
[1, 2, 3, 4, 5, 6]
***********************
[10, 20, 30, 40, 50, 60]
***********************
[2, 4, 6]
***********************
[1, 2, 3]
[100, 200, 300]
[101, 201, 301, 102, 202, 302, 103, 203, 303]
101 201 301 102 202 302 103 203 303
'''
关于列表常用的函数
- len求长度
x = [x for x in range(1,100)]
print(len(x)) #长度为99
- max求最大值,min求最小值
x = [x for x in range(1,100)]
print(max(x))
print(min(x))
y = ["哈啊哈","张春","666"]
print(max(y))
print(min(y))
'''结果为
99
1
张春
666
'''
- append 在列表最后一个元素后面增加一个元素
a = [1,2,3,4,5]
print(a)
print(id(a))
a.append(777)
print(a)
print(id(a))
'''
[1, 2, 3, 4, 5]
2269646838664
[1, 2, 3, 4, 5, 777]
2269646838664
'''
- insert 在指定位置插上一个元素 insert(index, data)
a = [1,2,3,4,5]
print(a)
print(id(a))
a.insert(3, 777)
print(a)
print(id(a))
'''
[1, 2, 3, 4, 5]
3219775124616
[1, 2, 3, 777, 4, 5]
3219775124616
'''
- 删除:
1.del
2.pop 把最后一个元素取出来
a = [1,2,3,4,5]
last_element = a.pop()
print(a)
print(last_element)
'''
[1, 2, 3, 4]
5
'''
3.remove 删除指定的变量 但是list中没有这个变量会报错,所以先检验。
a = [1,2,3,4,5]
print(a)
print(id(a))
if 4 in a:
a.remove(4)
print(a)
print(id(a))
#id值一样,说明是在原list上进行的操作
'''
[1, 2, 3, 4]
2269647026696
[1, 2, 3]
2269647026696
'''
- clear 清空列表,保持原地址不变
a = [1,2,3,4,5]
print(a)
print(id(a))
a.clear()
print(a)
print(id(a))
'''
[1, 2, 3, 4, 5]
2269645338440
[]
2269645338440
'''
- reverse 列表反转,也保持原地址不变
a = [1,2,3,4,5]
print(a)
print(id(a))
a.reverse()
print(a)
print(id(a))
'''
[1, 2, 3, 4, 5]
3219775123848
[5, 4, 3, 2, 1]
2269647027848
'''
- extend 扩展列表,相当于列表的加法
a = [1,2,3,4,5]
b = [6,7,8,9,10]
print(a)
print(id(a))
a.extend(b)
print(a)
print(id(a))
'''
[1, 2, 3, 4, 5]
3219776354888
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3219776354888
'''
- count 查找列表中指定元素的个数
a = [1,2,3,4,5,6,7,5,5]
lenele_5 = a.count(5)
print(lenele_5)
#3
- copy 浅拷贝,改变函数地址,生成新的地址
# 列表类型变量赋值示例
a = [1,2,3,4,5]
print(a)
print(id(a))
b = a
b[1] = 666
print(b)
print(id(b))
print(a)
print(id(a))
#说明list传的是地址,不是值
print("*" * 50)
#为了解决以上问题,用copy函数
c = [1,2,3,4,5]
print(c)
print(id(c))
d = c.copy()
d[1] = 666
print(d)
print(id(d))
print(c)
print(id(c))
'''
[1, 2, 3, 4, 5]
1583943224456
[1, 666, 3, 4, 5]
1583943224456
[1, 666, 3, 4, 5]
1583943224456
**************************************************
[1, 2, 3, 4, 5]
1583944193800
[1, 666, 3, 4, 5]
1583943273672
[1, 2, 3, 4, 5]
1583944193800
'''
- 深浅拷贝区别
#浅拷贝只拷贝一层内容
#深拷贝需要特殊工具
a = [1,2,3,[10,20,30]]
b = a.copy()
print(id(a))
print(id(b))
print(id(a[3]))
print(id(b[3]))
a[3][2] = 666
print(a)
print(b)
'''
3219775137736
3219775137480
3219773936392
3219773936392
[1, 2, 3, [10, 20, 666]]
[1, 2, 3, [10, 20, 666]]
'''