Python算法--数据分类处理

输入:

15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 123
5 6 3 6 3 0

输出:

30 3 6 0 123 3 453 7 3 9 453456 13 453 14 123 6 7 1 456 2 786 4 46 8 665 9 453456 11 456 12 786

说明:

将序列R:5,6,3,6,3,0(第一个5表明后续有5个整数)排序去重后,可得0,3,6。
序列I没有包含0的元素。
序列I中包含3的元素有:I[0]的值为123、I[3]的值为453、I[7]的值为3、I[9]的值为453456、I[13]的值为453、I[14]的值为123。
序列I中包含6的元素有:I[1]的值为456、I[2]的值为786、I[4]的值为46、I[8]的值为665、I[9]的值为453456、I[11]的值为456、I[12]的值为786。
最后按题目要求的格式进行输出即可。 

答案与解析

from collections import defaultdict

I = input().split()[1:]
R = input().split()[1:]
#要先改格式不然会按字符串排序规则排序,比如说排成[16,26,4]
R = [int(x) for x in R]
r=sorted(list(set((R))),reverse=False)
#再改回来,因为后面按字符串规则查找对应片段
R = [str(x) for x in r]
#用这个函数可以自定义一个值为列表的字典
a = defaultdict(list)
n=0#初始值
for i in range(len(R)):
    for j in range(len(I)):
        if len(R[i])>len(I[j]):
            continue
        else:
            for k in range(len(I[j])):
                if I[j][k:k+len(R[i])]==R[i]:
                    if j not in a[R[i]]:
                        a[R[i]].append(j)
                        #以配对成功的r[i]为键,
#                         向它的值列表中添加I中对应索引号;
#这里算的是R[i]的个数和用于表示与R[i]匹配成功的I数量的数字
# (比如说题目的输出中的首个6)
n += 2*(len(a))
for i in range(len(a)):
    b = 2*(len(a[list(a.keys())[i]]))
    n += b
print(n,end=' ')
for i in range(len(a)):
    print(list(a.keys())[i],end=' ')
    print(len(a[list(a.keys())[i]]),end=' ')
    for j in a[list(a.keys())[i]]:
        print(j,end=' ')
        print(I[j],end=' ')
        
                        

           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值