如何实现列表交替元素按指定规则配对生成嵌套列表?
解决方案
你的需求是将列表按每4个元素为一组,每组内前两个元素分别与后两个元素配对,再把所有组的结果合并。之前的代码错误在于直接对整个列表和偏移2的列表做zip,会产生跨组的配对,不符合预期。
实现步骤
- 分组:将原列表按每4个元素拆分为若干子组
- 组内配对:对每个子组,用
zip将前2个元素与后2个元素配对 - 格式转换:把
zip生成的元组转为列表,合并所有结果
代码实现
original_list = ['L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7', 'L8'] # 按每4个元素分组 groups = [original_list[i:i+4] for i in range(0, len(original_list), 4)] # 生成目标嵌套列表 list_in_pairs = [] for group in groups: # 组内前两个元素与后两个元素配对 pairs = zip(group[:2], group[2:]) # 将元组转为列表并添加到结果中 list_in_pairs.extend([list(pair) for pair in pairs]) print(list_in_pairs) # 输出: [['L1', 'L3'], ['L2', 'L4'], ['L5', 'L7'], ['L6', 'L8']]
简化版(列表推导式)
如果喜欢更简洁的写法,可以用嵌套列表推导式一步完成:
original_list = ['L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7', 'L8'] list_in_pairs = [list(p) for group in [original_list[i:i+4] for i in range(0, len(original_list),4)] for p in zip(group[:2], group[2:])]
原代码问题分析
你之前的list(zip(List[::1], List[2::1]))会把整个列表和从索引2开始的列表逐元素配对,得到的结果是[(L1,L3), (L2,L4), (L3,L5), (L4,L6), (L5,L7), (L6,L8), (L7, None), (L8, None)](当列表长度为8时),这显然和你要的分组配对逻辑不符。
内容的提问来源于stack exchange,提问作者user3555115
相关产品推荐
相关产品推荐

