小题目大智慧

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

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

本文分享自微信公众号 - googpy(googpy),作者:stormwen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python字符串处理的8招秘籍

    Python的字符串处理,在爬虫的数据解析、大数据的文本清洗,以及普通文件处理等方面应用非常广泛,而且Python对字符串的处理内置了很多高效的函数,功能非常强...

    stormwen
  • mini文件搜索工具

    每个人电脑上都安装了Python,无论是py2.7还是py3.7。以我安装的py3.7为例,搜索整个py3.7下面的所有目录(包括子目录),里面的所有文件:

    stormwen
  • 带你认识优秀的python代码

    有一串长的字符串names = "LI XIA , ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI, CHANG JIA...

    stormwen
  • Manjaro安装后该干什么

    Manjaro 相比大家,就不介绍了,这里主要讲安装完系统之后的一些操作,下面是我自己的喜欢环境及软件,根据个人喜好删减设置。

    歪先生
  • Unix/Linux fork前传

    fork的思想在UNIX出现几年前就出现了,时间大概是1963年,这比UNIX在PDP-7上的第一个版本早了6年。

    Linux阅码场
  • 使用proxy 改写小程序接口为 promise

    copy_left
  • Manjaro安装配置

    0. 安装 # 启动时选择第二项boot(non-free),Manjaro自带的驱动精灵会帮你安装好所需驱动,笔记本双显卡则会帮你安装bumblebee d...

    斯武丶风晴
  • [Linux]ankisyncd同步服务器重启脚本(Anki软件使用)

    相对于针对Anki2.0的同步服务器程序AnkiServer,个人亲测觉得ankisyncd这个程序既不稳定,也不方便,用过一两天就崩溃了,而且独占终端,没有关...

    祥知道
  • React Native之hellWord

    初始化项目工程 ---- 进入自己的工作空间然后shift+鼠标右键打开命令行窗口执行如下命令创建RN工程HelloWorld: ? 然后使用Androi...

    xiangzhihong
  • 【LeetCode】860. 柠檬水找零【贪心】

    每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

    韩旭051

扫码关注云+社区

领取腾讯云代金券