零基础 学 python开发 (Genius套餐A) 二十一

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/90059472

夜光序言:

 

 

人生是变幻无常的,犹如我们的成长。大学毕业后,我们为了自己的梦想去拼搏,努力奋斗,可我们却在现实中渐渐变得冷漠、变得复杂。我们再也回不去大学宿舍,那种吵吵闹闹,简简单单,可是却互相鼓励,互相支持的集体生活,而这,恰恰是我们最需要的。

 

 

 

 

正文:

4.2 字符串函数 
4.2.1 目标 


字符串的操作有很多函数,例如查找一个字符串 s 是否包含另外一个字符串 t 是字符串运算与查找中经常使用的,目标掌握这些常用的字符串函数。



4.2.2 字符串函数 


1、字符串的子串 string[start:end:step] 


字符串中的子串规则与列表中的切片规则完全一样,只是字符串切片后返回一个新的字符串,原来字符串不变。

start.end,step 可选,冒号必须的, 基本含义是从 start 开始(包括 string[start]),以 step为步长,获取到 end 的一段元素(注意不包括 string[end])。

如果 step=1,那么就是 string[start],string[start+1],......,string[end-2],string[end-1],
如 果 step>1 , 那 么 第 一 为 string[start] , 第 二 为 string[start+step] ,第三为string[start+2*step],......, 以此类推,最后一个为 string[m],其中 m<end,但是 m+step>=end。

即索引的变化是从 start 开始,按 step 跳跃变化,不断增大,但是不等于 end,也不超过 end。

如果 end 超过了最后一个元素的索引,那么最多取到最后一个元素。
start 不指定默认 0,end 不指定默认序列尾,step 不指定默认 1.
step 为正数则索引是增加的,索引沿正方向变化;如何 step<0,那么索引是减少的,按负方向变化。

我们不能使用 step=0,不然索引就原地踏步不变了。
如果 start,end 为负数,表示倒数的索引,例如 start=-1,则表示 len(string)-1, start=-2,
表示 len(string)-2。



例如:
s= "abcdefghijk"
print("s---",s)
print("s[0:2]---",s[0:2])
print("s[:2]---",s[:2])
print("s[2:]---",s[2:])
print("s[2,6]---",s[2:6])
print("s[:]---",s[:])
print("s[::,2]---",s[::2])
print("s[0:7:2]---",s[0:7:2])
print("s[8:14])---",s[8:14])
print("s[1:5:2]---",s[1:5:2])
print("s[1:4:2]---",s[1:4:2])
 结果:
s--- abcdefghijk
s[0:2]--- ab
s[:2]--- ab
s[2:]--- cdefghijk
s[2,6]--- cdef
s[:]--- abcdefghijk
s[::,2]--- acegik
s[0:7:2]--- aceg
s[8:14])--- ijk
s[1:5:2]--- bd
s[1:4:2]--- bd
例如:
s= "abcdefghijk"
print("s---",s)
print("s[0:-2]---",s[0:-2])
print("s[:-2]---",s[:-2])
print("s[-2:]---",s[-2:])
print("s[-2,6]---",s[-2:6])
print("s[:]---",s[:])
print("s[::,-2]---",s[::-2])
print("s[7,-1:-1]---",s[7:-1:-1])
print("s[8:0.-1])---",s[8:0:-1])
print("s[5:1:-2]---",s[5:1:-2])
print("s[4:1.-2]---",s[4:1:-2])
 结果:
s--- abcdefghijk
s[0:-2]--- abcdefghi
s[:-2]--- abcdefghi
s[-2:]--- jk
s[-2,6]---
s[:]--- abcdefghijk
s[::,-2]--- kigeca
s[7,-1:-1]---
s[8:0.-1])--- ihgfedcb
s[5:1:-2]--- fd
s[4:1.-2]--- ec



2、字符串转大小写函数 upper(),lower() 


格式: s.upper() 
作用:返回一个字符串,把 s 中的所有小写转为大写 
格式: s.lower() 
功能:返回一个字符串,把 s 中所有大写字母转为小写 
例如:
s=" Python(version4.5)is easy
print(s.upper())
print(s.lower())
print(s)
输出:
PYTHON(VERSION4.5)IS EASY
python(version4.5)is easy
Python(version4.5)is easy
注意 s 自己是不变化的,s.upper()只是返回另外一个大写的新的字符串。



3、字符串查找函数 find(t) 


格式:s.find(t) 
作用:返回在字符串 s 中查找 t 子串第一个出现的位置下标,如不存在就返回-1 
例如:
s="12abcabcab"
i=s.find("ab")
j=s.find("abd")
print(i,j)
输出:
2 -1
"ab"在 s 中出现两次,返回第一次出现的位置 2, "abd"在 s 中不存在。



4、字符串查找函数 rfind(t) 


格式:s.rfind(t) 
作用:返回在字符串 s 中查找 t 子串最后一个出现的位置下标,如不存在就返回-1 
例如:
s="12abcabcab"
i=s.rfind("ab")
j=s.rfind("abd")
print(i,j)
输出:
8 -1
"ab"在 s 中出现两次,返回第后次出现的位置 8, "abd"在 s 中不存在。
rfind 函数与 find 函数类似,只是 rfind 从右边开始找 t,而 find 是从左边开始找。



5、字符串查找函数 index(t) 


格式:s.index(t) 
作用:返回在字符串 s 中查找 t 子串第一个出现的位置下标,如不存在就出错误。 
例如:
s="12abcabcab"
i=s.index("ab")
j=s.index("abd")
print(i,j)
index 函数与 find 函数功能完全一样,不同的是要找的子串不存在时,index 会报错误,
find 只默默返回-1,find 比 index 好用,建议使用 find 而不用 index。



6、字符串判断函数 startswith(t),endswith(t) 


格式:s.startswith(t) 
作用:判断字符串 s 是否以子串 t 开始,返回逻辑值。 
格式:s.endswith(t) 
作用:判断字符串 s 是否以子串 t 结束,返回逻辑值。 
例如:
s="12abcabcab"
i=s.startswith("12a")
j=s.endswith("ab")
print(i,j)
结果:
True True
显然我们可以用 find 函数来编写功能与.startswith(t)一样的 myStartsWith(s,t)函数:
def myStartsWith(s,t):
 i=s.find(t)
 if i==0:
 return True
 else:
 return False
myStartsWith(s,t)函数与 s.startswith(t)最大不同是前者是一般函数,字符串 s 作为变量
传入,而后者 startswith(t)是字符串对象自己的函数,因此使用方法不同。
同样也可以编写功能与 endswith(t)一样的函数 myEndsWith(s,t):
def myEndsWith(s,t):
 i=s.rfind(t)
 if i>=0 and i==len(s)-len(t):
 return True
 else:
 return False
 



7、字符串去掉空格函数 lstrip(),rstrip(), strip() 


格式:s.lstrip() 
作用:返回一个字符串,去掉了 s 中左边的空格 
格式:s.rstrip() 
作用:返回一个字符串,去掉了 s 中右边的空格 
格式:s.strip() 
作用:返回一个字符串,去掉了 s 中左边与右边的空格,等同 s.lstrip().rstrip() 
例如:
s=" ab x yz "
a=s.lstrip()
b=s.rstrip()
c=s.strip()
print(a,len(a))
print(b,len(b))
print(c,len(c))
print(s,len(s))
由此可见它们只是去掉左边或者右边的空格,不去掉字符串中间包含的空格。



8、字符串分离函数 split(sep) 


格式: s.split(sep) 
作用: 用 sep 分割字符串 s,分割出的部分组成列表返回 
其中 sep 是分隔符,结果是字符串按 sep 字符串分割成多个字符串,这些字符串组成一
个列表,即函数 split 调用后返回一个列表。例如:
s="I am learning Python"
w=s.split(" ")
print(w)
是把字符串 s 按空格分离开成一个列表,结果:
['I', 'am', 'learning', 'Python']
而程序:
s="I am learning Python"
w=s.split("ear")
print(w)
是按"ear"把字符串 s 分离开,结果:
['I am l', 'ning Python']
程序:
s="abcabcabc"
w=s.split("ab")
print(w)
是按"ab"分离字符串,结果:
['', 'c', 'c', 'c']
第一个元素是一个空字符串。



例 4-2-1:编写 myLower(s)实现 s.lower() 


def myLower(s):
 t=""
 for i in range(len(s)):
 if s[i]>="A" and s[i]<="Z":
 t=t+chr(ord("a")+ord(s[i])-ord("A"))
 else:
 t=t+s[i]
 return t
s="aABEbwWFEW"
a=s.lower()
b=myLower(s)
print(a)
print(b)
结果发现 myLower(s)功能与 s.lower()一样。



例 4-2-2:编写 myStrip(s)实现 s.strip() 


编写函数 myStrip(s),在 s 的左边与右边找空格,跳过这些空格
def myStrip(s):
 i=0
 j=len(s)-1
 #i 是左边下标,跳过左边空格
 while i<=j and s[i]==" ":
 i=i+1
 #j 是右边下标,跳过右边空格
 while j>=i and s[j]==" ":
 j=j-1
 return s[i:j+1]
s=" a b "
a=myStrip(s)
b=s.strip()
print(a,len(a))
print(b,len(b))
结果发现 myStrip(s)功能与 s.strip()一样。



 例 4-2-3:编写 mySplit(s,sep)实现 s.split(sep) 


仔细分析 split 的工作过程,你会看出 split 是怎么样工作的。s.split(sep)时首先它在字符串 s 找到 sep 的位置,例如在 i 处,让后把 s[0:i]部分做为第一个元素(不包含 s[i]),之后从[i]开始跨过 sep 取出 s[i+len(sep)]的后半部分,再次进行同样的操作,一直到找不到sep 为止。

例如 s="abcabcabc", s.split("ab"), 设计 t=[],在 i=0 处找到"ab",s[0:0]是空串,因此 t=[""],然后跨过"ab"后是 s[2:]即 s="cabcabc", 再次找"ab", i=1, s[0:1]为"c", 因此t=["","c"],s=s[1+2:]即 s="cabc", 再次找"ab", i=1, s[0:1]为"c", t=["","c","c"], 
s=s[1+2:]即"c", 在 s="c"中没有找到"ab",把"c"加入 t,因此最后 t=["","c","c","c"]。

我们可以自己编写一个 mySplit(s,sep)函数完成这个工作:
def mySplit(s,sep):
 i=s.find(sep)
 t=[]
 while i>=0:
 w=s[0:i]
 t.append(w)
 s=s[i+len(sep):]
 i=s.find(sep)
 t.append(s)
 return t
s="abcababcab"
a=s.split("ab")
b=mySplit(s,"ab")
print(a)
print(b)
结果发现与系统的 s.split(sep)功能一样。



4.2.3 【案例】寻找字符串的子串 


1、案例描述 
编写 myFind(s,t)实现 s.find(t)



2、案例分析 
设置 s 为字符串变量,在 s 中查找是否包含子字符串 t 是一个常用的操作。例如 s="I am testing", t="am", 那么 s 包含 t,如果 t="test",s 也包含 t,但是 t="tested"时 s 不包含 t。我们设计函数 index(s,t)测试 s 是否包含 t,如果包含就返回 t 在 s 的开始下标位置,不然返回-1。

查 找 的 方 法 是 从 s[i] 开 始 , 把 t 与 s[i] 对 齐 , 查 看 s[i] 与 t[0], s[i+1] 与t[1],.......,s[i+len(t)-1]与 t[len(t)-1]是否相同,如果都相同那么说明 s 包含 t,不然就更换一个 i 再次比较。



3、案例代码 
def myFind(s,t):
 m=len(s)
 n=len(t)
 if m<n:
 return -1
 i=0
 while i<=m-n:
 j=0
 while j<n:
 if s[i+j]!=t[j]:
 break
 j=j+1
 if j==n:
 return i
 i=i+1
 return -1
s="ababcabcd12ab"
print(myFind(s,"abc"),s.find("abc"))
print(myFind(s,"ad"),s.find("ad"))
结果发现 myFind(s,t)功能与 s.find(t)一样。

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/90059472
今日推荐