小白解题思路,另外搭配详细注释,非while循环方式

list1 = input().split()[1:]  # 收集数据条,排除第一位个数位

R = input().split()[1:]  # 收集规则条,排除第一位个数位
new_R = []  # 创建空的新规则列表,准备接收去重后的规则条

for j in R:  # 循环遍历原始规则条
    if j not in new_R:  # 判断:如果元素不在新列表中
        new_R.append(j)  # 将元素添加进新列表
        '''整个过程是对原始规则条的去重操作'''

res = []  # 创建空的结果列表
for i in sorted(new_R,key=int):  # 对新规则条以整数型进行升序排序(sorted(reverse=False)默认升序,key=int表示排序前将列表内元素先转化为整数型再排序,输出结果仍保留原始元素形式),然后遍历出单个元素
    matches = []  # 创建空的新列表,准备接收数据条的索引+值
    for k, v in enumerate(list1):  # 为数据条添加索引,k,v分别遍历出索引和值
        if i in v:  # 判断:如果规则i在数据值v中
            matches.append(k)  # 将对应的索引k和值v添加进列表
            matches.append(v)
    if matches:  # 判断:如果matches为True
        res.append(i)  # 在结果列表中添加规则i
        res.append(str(len(matches) // 2))  # 在结果列表中添加对应规则的数据个数(因为matches中是索引+值的形式,所以数据个数=总个数//2)
        res.extend(matches)  # 将matches添加到res列表的最末尾处
count = len(res)  # 统计res列表的长度(即 结果列表中最终有多少个元素)

for item in ([count] + res):  # 将总个数列表化后与res列表结合,循环读取其中的元素
    print(item,end=' ')  # 以元素+“ ”的形式打印输出