【刷题】数组拼接(超聚变暑期实习笔试)
一、题目描述
现在有多组整数数组,需要将他们合并成一个新的数组。合并规则是从每个数组中按顺序取固定长度的内容合并到新的数组中,取完的内容会被删除掉。如果改行不足固定长度或者已经为空,则直接取出剩余部分内容放到新数组中,然后继续下一行。
输入描述:
第一行输入每次要固定读取多少长度;
后面的每一行代表一个数组,数组元素用逗号分隔。
输出描述:
合并后的数组,元素用逗号分隔。
实例:
输入:
2
1,2,3
4,5,6,7,8
9,10
输出:
1,2,4,5,9,10,3,6,7,8
二、解题思路
1.读取输入:每次读取的长度n和用逗号分隔的数组;
2.依次从每个非空数组中取出最多 n
个元素。如果某个数组剩余元素不足 n
个,就取剩余全部。如果某个数组已经为空,则跳过它。
3.当所有数组都为空时,停止取数。
4.将所有依次取出的元素按顺序合并,转换成字符串,并用逗号分隔输出。
三、代码参考
def func1():n = int(input())#每次读取固定的长度narray = []#储存输入的数组while True:try:line = input().strip()#读取第一行并去掉首尾空格if not line:continue#遇到空行跳过arr = line.split(',')#用逗号分割成列表arr = [int(x) for x in arr if x]#转换成整数,并过滤空字符串array.append(arr)except EOFError:breakret = []while any(array):#只要数组不为空就继续循环for arr in array[:]:#遍历array的副本(避免修改影响迭代)if not arr:#如果数组为空就跳过continuetake = min(n,len(arr))#如果不为空,就取出前n个或者剩余所有元素ret.extend(arr[:take])del arr[:take]#删除已经取出的元素print(','.join(map(str,ret)))func1()