首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小题目大智慧

小题目大智慧

作者头像
stormwen
发布2019-08-05 20:18:24
4470
发布2019-08-05 20:18:24
举报
文章被收录于专栏:公众号:googpy公众号:googpy

元旦三天小长假,很多小伙伴肯定都无心学习,想假期好好出去嗨一嗨,但是,放松之余也别忘了学习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工作效率提高,而且代码也比较容易理解。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 googpy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档