灵活应用列表和字段
前言
采用创新方式,精选趣味、实用性强的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是修改原来的列表