合并两个数量相等的列表

3
问题是合并两个列表,保持顺序,并且在合并后的列表中具有相同数量的项目,该列表不能超过10(或任何数字)项,但尽可能多。这是最简单的例子。
l1 = list('1'*10)
l2 = list('2'*10)
lt = l1[:5] + l2[:5]

然而,如果一个列表没有5个项目,新列表将被填充其他列表中的项目。
l1 = list('1'*2)
l2 = list('2'*10)
lt = ['1','1','2','2','2','2','2','2','2','2']

l1 = list('1'*10)
l2 = list('2'*2)
lt = ['1','1','1','1','1','1','1','1','2','2']

该函数应该接受包含任意数量项的列表。这似乎很简单,但实际上并非如此。
1个回答

5
你想要选择以下两者中的较大值:从列表中选择五个项目,或者选择足够数量的项目以填满列表到所需长度。
lt = l1[:max(5, 10 - len(l2))] + l2[:max(5, 10 - len(l1))]

嗯,这很简单,但我想不出来。你能否将其重写为一个函数,例如f(l1,l2,x),其中x是合并列表中的最大项目数?显然,我自己也可以做到这一点 - 只是为了得到一个更通用的答案。 - user479870
或者将 max(5, 10 - len(l2)) 存储为一个变量,这样会更加通用。 - jamylak
@pdknsk def combine_to_length(list1, list2, length): return list1[:max(length // 2, length - len(list2))] + list2[:max(length // 2, length - len(list1))] - agf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接