题解 | #数据分类处理#

数据分类处理

http://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd

我觉得这题的难点在于怎么把含R[i]的I[j]按它们原本在I中的顺序输出

我想到的办法是用list.index()方法,找到位置以后把这个位置设置成null,这样下次同一元素查位置的时候找到的就是下一个该元素的位置了

import re
while 1:
    try:
        I = input()
        R = input()
        lst_I = I.split(" ")[1:]#输入字符串的第一位多少整数其实没有用,这里可以直接删了
        lst_R = sorted(map(int,list(set(R.split(" ")[1:]))))#这里的排序必须要按int排,按str排会出问题
        I = I[len(I.split(" ")[0])+1:]
        R = R[len(R.split(" ")[0])+1:]

        lst_place=[]
        for i in lst_R:
            find = '[0-9]*'+'%d'%i+'[0-9]*'
            b = re.findall(find,I)#b返回的是所有包含R[i]的列表,而且是按顺序排的
            lst_I = I.split(" ")#进行下一轮查找R[i]所包含的值前,需要将前一轮替换的null抹掉
            if len(b) != 0:
                lst_place.append('%d'%i+' '+str(len(b)))#将R[i]及其个数放在这一段的开头
                for item in b:
                    place = lst_I.index(item)#找到包含R[i]的元素item的位置
                    lst_I[place] = 'null'#将该位置替换为null,这样下次有相同值的item就不会找到当前位置了
                    lst_place.append(str(place)+' '+item)#将位置和item加入列表
                    
        a=''
        for i in lst_place:
            a = a+' '+i

        print(str(len(lst_place)*2)+a)#因为list place里的整数都是成对出现的,所以*2
    except:
        break
全部评论

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务