python算法-旋转字符串&相对排名--Day02

灵活应用列表和字段


前言

采用创新方式,精选趣味、实用性强的l例子,从不同难度、不同算法、不同类型和不同数据结构进行总结,全面提升算法能力。

例1.旋转字符串

给定一个字符串(以字符数组的形式)和一个偏移量,根据偏移量原地从左向右旋转字符串
示例:输入str=“abcdefg”,offset=3,输出"efgabcd";
输入str=“abcdefg”,offset=1,输出"gabcdef";
输入str=“abcdefg”,offset=0,输出"abcdefg";

代码如下(示例):

class Solut:
    def sol(self,str,offset):#设定功能函数
        if len(str) > 0:#如果字符串的长度大于0
            offset = offset % len(str)#旋转的字符个数
        tem = (str + str)[len(str)-offset:len(str)*2-offset]#采用字符串乘以2的方法,再用列表的切片取出旋转的字符
        for i in range(len(tem)):#进行for循环
            str[i] = tem[i]#将原来的字符串进行替换,目的是节省内存空间
        return str

if __name__ == '__main__':
    s = ["a","b","c","d","e","f","g"]
    s1 = Solut()
    ans = s1.sol(s,3)
    print(ans)

得到的结果:[‘e’, ‘f’, ‘g’, ‘a’, ‘b’, ‘c’, ‘d’]

例2.相对排名

根据N名运动员的得分,找到相对等级和获得最高分前3名的人,分别获得金牌、银牌和铜牌。N是正整数,并且不超过10000。所有运动员的成绩都保证是独一无二的。
示例,输入[5,4,3,2,1],输出:[“Gold”,“Silver”,“Bronze”,“4”,“5”],前3名运动员得分较高,根据得分依次获得金牌、银牌和铜牌。对于后两名运动员,根据分数输出相对等级。

代码如下(示例):

class PaiM:
    def Pm(self,list):
        score = {} #设置空字典
        for i in range(len(list)):
            score[list[i]] = i#相当于输出了新的字典{6: 0, 5: 1, 4: 2, 3: 3, 2: 4, 1: 5}
        sortedScore = sorted(list,reverse=True)#先升序,后降序,得[6,5,4,3,2,1]
        ans = [0] * len(list)#将列表的元素全设置为0,相当于[0,0,0,0,0,0]
        for i in range(len(sortedScore)):
            res = str(i + 1)#要设置为字符串类型
            if i == 0:
                res = "Gold"
            if i == 1:
                res = "Silver"
            if i == 2:
                res = "Bronze"
            ans[score[sortedScore[i]]] = res#依次将ans的6个0替换为排名
        return ans
if __name__ == '__main__':
    list1 = [6,5,4,3,2,1]
    s = PaiM()
    print(s.Pm(list1))

得到的结果:[‘Gold’, ‘Silver’, ‘Bronze’, ‘4’, ‘5’, ‘6’]


总结

1.将原来的字符串进行替换,可以节省内存空间
如果再创建新的变量名,那就会浪费内存空间了
2.sorted和sort有区别
sorted是增加副本,不修改原来的列表
sort是修改原来的列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时知彼岸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值