1. 首页
  2. Python

小题目大智慧

元旦三天小长假,很多小伙伴肯定都无心学习,想假期好好出去嗨一嗨,但是,放松之余也别忘了学习python哦。

不积跬步无以至千里,不积小流无以成江海。做事贵在一个坚持。

今天给大家分享一道实战题目,题目虽小,包含的知识点却很多,希望小伙伴们细细品味。

给定2个字符串s1,s2,判定s2能否给s1做循环移位得到字符串的包含。比如:s1=“AABBCD”,s2=“CDAA”。

这道题看起来很复杂,仔细想想其实每个字母循环移位到最右边,不断的移位,到最后就变成AABBCDAABBCC,然后只要判断一些s2在不在里面就行了。

根据这个思路,编写的代码如下:

def problem5(s1,s2):

s1 = str("AABBCD")

s2 = str("CDAA")

s3 = s1+s1

if(len(s3)>len(s2)):

print(s3.find(s2))

else:

print(s2.find(s3))

problem5(str("AABBCD"),str("CDAA"))

上面的代码中用到了find()函数,下面我把这个函数详细介绍一下。

Python find()方法主要检测字符串是否包含子字符串str,如果指定beg(开始)和end(结束)范围,则检查是否包含在指定范围内,如果包含子字符串,则返回子字符串开始位置的索引值,否则返回-1。

Find()函数语法是:str.find(str,beg=0,end=len(string))。

str——指定检索的字符串

beg——开始索引,默认为0

end——结束索引,默认字符串的长度

下面举个例子,大家一看就懂了。

Str1=“Hello,python!”

Print(str1.find(‘python’))

Print(str1.find(‘ok’))

输出结果:6

-1

小题目大智慧

那么,今天既然给大家介绍到移位,索性就给大家介绍用python序列循环移位的3种方法。

方法一:

def demo(lst,k):

temp=lst[:]

for i in range(k):

temp.append(temp.pop(0))

return temp

这个方法优点不言而言,代码直截了当、容易理解,缺点是速度慢,只能实现循环左移。

方法二:

def demo(lst,k):

x=lst[k-1::-1]

y=lst[:k-1:-1]

return list(reversed(x+y))

方法二特点是速度快,并且自适应循环左移(k>0)和右移(k<0),缺点是涉及算法,不易理解。

这个方法编写的代码包含reverse(),简单说一下这个函数的作用,主要用途是反转列表元素的排列顺序。

举个例子便于大家理解。

lst=list(range(20)) #测试用的列表

demo(lst,3) #循环左移3

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2] #输出结果

方法三:

def demo(lst,k):

return list[k:] +list[:k]

这个方法我觉得贼牛逼,把python中的切片发挥的淋漓尽致,速度最快,可同时实现循环左移(k>0)和右移(k<0)。后面我会单独讲一讲切片,我觉得运用切片可以使python工作效率提高,而且代码也比较容易理解。

今天的分享就到这了,通过一道题目就可以延伸出这么多个知识点,所以,果然还是实战是检验理论的唯一方法。如果有写的不到位的地方,欢迎小伙伴们批评指正,也希望可以多和大神交流经验。

原文始发于:小题目大智慧

主题测试文章,只做测试使用。发布者:熱鬧獨處,转转请注明出处:http://www.cxybcw.com/12118.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code