Python算法--数据分类处理

Python算法--数据分类处理,第1张

输入:

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=' ')
        
                        

           

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/732562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存