题解 | #数据分类处理#

数据分类处理

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
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
积极向上的林同学:董事长亲自面试
点赞 评论 收藏
分享
06-14 19:09
门头沟学院 Java
darius_:给制造业搞的,什么物料管理生产管理,设备管理点检,最最关键的就是一堆报表看板。个人觉得没啥技术含量都是些基本的crud,但是业务很繁琐那种
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了 ,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务