0


(day19)HJ25. 数据分类处理

描述

信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。

采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出。

数据范围:1≤𝐼,𝑅≤100 ,输入的整数大小满足 0\leqslant val\leqslant 2^{31}-1

输入描述:

一组输入整数序列I和一组规则整数序列R,I和R序列的第一个整数为序列的个数(个数不包含第一个整数);整数范围为0~(2^31)-1,序列个数不限

输出描述:

从R依次中取出R,对I进行处理,找到满足条件的I:

I整数对应的数字需要连续包含R对应的数字。比如R为23,I为231,那么I包含了R,条件满足 。

按R从小到大的顺序:

(1)先输出R

(2)再输出满足条件的I的个数;

(3)然后输出满足条件的I在I序列中的位置索引(从0开始);

(4)最后再输出I。

附加条件:

(1)R需要从小到大排序。相同的R只需要输出索引小的以及满足条件的I,索引大的需要过滤掉

(2)如果没有满足条件的I,对应的R不用输出

(3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)

序列I:15,123,456,786,453,46,7,5,3,665,453456,745,456,786,453,123(第一个15表明后续有15个整数)

序列R:5,6,3,6,3,0(第一个5表明后续有5个整数)

输出: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

说明:

30----后续有30个整数

3----从小到大排序,第一个R为0,但没有满足条件的I,不输出0,而下一个R是3

6--- *存在6个包含3的I *

0--- *123所在的原序号为0 *

123--- 123包含3,满足条件

示例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。
最后按题目要求的格式进行输出即可。   

shit-mountain

import sys
def part_num(item,num_list):
    li = [item,0]
    count  = 0
    for i in range(len(num_list)):
        if item in num_list[i]:
            li[0] = int(item)
            li.append(i)
            li.append(int(num_list[i]))
            count  += 1
            li[1] = count
        
        else:
            continue
    return li
    
li1, li2 = input().split(), input().split()
n1, n2 = int(li1[0]), int(li2[0])
I = li1[1::]
R1 =sorted(list(set(map(int,li2[1::]))))
R = [str(item) for item in R1]
li0 = [0]
for item in R:
    li= part_num(item,I)
    if li[1]!= 0:
        li0.extend(li)
li0[0] = len(li0)-1
for i in li0:
    print(i,end= ' ')
    

易错点:直接对字符串进行排序;试图对集合排序(集合本身是无序的);列表的合并

简洁写法(牛客题解AlfredP)

# 获取输入并分割,去掉第一个元素(假设第一个元素是长度信息)
I = [i for i in input().split(' ')[1:]]
# 获取输入并分割,去掉第一个元素(假设第一个元素是长度信息),将剩余元素转为整数并去重
R = list(set([int(i) for i in input().split(' ')[1:]]))
# 将R中的元素排序
R.sort()
# 将R中的元素转为字符串
R = [str(i) for i in R]
# 初始化结果字符串
res = ''
# 初始化总计数器
tot_count = 0

# 遍历R中的每个元素
for r in R:
    # 初始化当前R元素的结果字符串
    res_R = ''
    # 初始化当前R元素的计数器
    count = 0
    # 遍历I中的每个元素及其索引
    for index, i in enumerate(I):
        # 如果当前I元素包含当前R元素
        if r in i:
            # 计数器加1
            count += 1
            # 将索引和I元素添加到当前R元素的结果字符串中
            res_R += (' ' + str(index) + ' ' + i)
    # 如果当前R元素的结果字符串不为空
    if res_R:
        # 更新总计数器(每个R元素的结果包括2个基本元素和每个匹配的I元素的2个元素)
        tot_count += (2 + count * 2)
        # 将当前R元素及其结果添加到最终结果字符串中
        res += (' ' + r + ' ' + str(count) + res_R)

# 输出总计数器和结果字符串
print(str(tot_count) + res)

合并列表(转自博主AI大模型学习不迷路)

一、使用 + 运算符合并列表

最直接的方法是使用 + 运算符,它可以将两个列表简单地拼接在一起。(按变量顺序拼接)这种方法简单快捷,适用于当你需要将两个列表直接连接在一起时。

代码示例:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = list1 + list2
print(merged_list) # 输出:[1, 2, 3, 4, 5, 6]

二、使用 extend() 方法

也可以使用列表的 extend() 方法,它将一个列表的所有元素添加到另一个列表的末尾。使用 extend() 方法会改变原来的列表,而不是创建一个新的列表。

代码示例:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # 输出:[1, 2, 3, 4, 5, 6]

三、 * 运算符和 zip() 函数

如果你想交叉合并两个列表,你可以使用 * 运算符和 zip() 函数。这种方法将两个列表中对应位置的元素合并在一起。

代码示例:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = [item for pair in zip(list1, list2) for item in pair]
print(merged_list) # 输出:[1, 4, 2, 5, 3, 6]

四、使用列表推导式

列表推导式提供了一种简洁的方式来合并列表。这种方法非常灵活,可以用于更复杂的列表合并操作。

代码示例:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = [item for sublist in [list1, list2] for item in sublist]
print(merged_list) # 输出:[1, 2, 3, 4, 5, 6]

五、itertools.chain() 合并列表

itertools.chain() 函数可以用来合并任意数量的列表或者其他可迭代对象。这种方法在处理大量列表时非常高效。

代码示例:

from itertools import chain
list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = list(chain(list1, list2))
print(merged_list) # 输出:[1, 2, 3, 4, 5, 6]

总结

使用 + 运算符或 extend() 方法可以快速合并两个列表,而 zip() 函数和列表推导式提供了更多的灵活性,适用于更复杂的情况。itertools.chain() 函数是合并大量列表的高效选择。根据你的具体需求,选择最合适的方法将使你的代码更加简洁高效。

标签: 大数据

本文转载自: https://blog.csdn.net/m0_54414851/article/details/140450507
版权归原作者 人生几何同学 所有, 如有侵权,请联系我们删除。

“(day19)HJ25. 数据分类处理”的评论:

还没有评论