如何基于可变长度初始列表生成每两元素重复指定值的等长新列表
问题与解决方案
需求说明
给定长度可变的列表x(示例:x=[25,100,63,138,103,178,125,195...]),需要生成两个和x长度一致的列表y、y1,要求列表中每两个连续元素为同一指定数值,示例输出:
y=[140,140,138,138,140,140,138,138]y1=[140,140,138,138,136,136,140,140]
Python实现方案
核心思路是按「每两个元素为一组」的规则,循环使用指定的数值序列填充,直到达到原列表的长度。
生成列表y
x = [25,100,63,138,103,178,125,195] # 指定y要循环的数值序列 y_seq = [140, 138] y = [] target_len = len(x) # 循环生成每组两个相同元素 cycle_num = (target_len + 1) // 2 for i in range(cycle_num): current_val = y_seq[i % len(y_seq)] y.extend([current_val, current_val]) # 截断到和原列表一致的长度 y = y[:target_len] print(y) # 输出符合要求的列表y
生成列表y1
只需更换循环的数值序列即可:
# 指定y1要循环的数值序列 y1_seq = [140, 138, 136, 140] y1 = [] cycle_num = (target_len + 1) // 2 for i in range(cycle_num): current_val = y1_seq[i % len(y1_seq)] y1.extend([current_val, current_val]) y1 = y1[:target_len] print(y1) # 输出符合要求的列表y1
通用封装函数
如果需要多次生成这类列表,可以封装成通用函数,复用性更强:
def make_paired_list(target_length, value_cycle): result = [] cycle_count = (target_length + 1) // 2 for i in range(cycle_count): val = value_cycle[i % len(value_cycle)] result.extend([val, val]) return result[:target_length] # 调用示例 x = [25,100,63,138,103,178,125,195] y = make_paired_list(len(x), [140, 138]) y1 = make_paired_list(len(x), [140, 138, 136, 140])
内容的提问来源于stack exchange,提问作者Borna nejat
相关产品推荐
相关产品推荐

