如何用Python生成交替间隔的奇数长度数字列表组合并存储?
Python实现交替生成奇数长度列表并存储的需求
问题描述
给定两个数字列表:
A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] B = [101, 102, 103, 104, 105, 106, 107, 108, 109, 200]
需要按以下规则生成并存储列表:
- 生成
X和Y两个列表,它们的长度始终为奇数(3、5……),直到原列表长度n(此处n=10)之前的最后一个奇数(即9)。 X的元素规则:[A[0], B[1], A[2], ..., A[奇数索引]](Python为0索引,对应描述中的A₁、B₂等)Y的元素规则:[B[0], A[1], B[2], ..., B[奇数索引]]- 将不同长度的
X依次存入storage_X,不同长度的Y依次存入storage_Y,示例如下:storage_X = [[1, 102, 3], [1, 102, 3, 104, 5], ..., [长度为9的X列表]] storage_Y = [[101, 2, 103], [101, 2, 103, 4, 105], ..., [长度为9的Y列表]]
实现代码
A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] B = [101, 102, 103, 104, 105, 106, 107, 108, 109, 200] # 确定目标奇数长度范围:从3开始到小于n的最大奇数 n = len(A) max_odd = n - 1 if n % 2 == 0 else n - 2 target_lengths = range(3, max_odd + 1, 2) storage_X = [] storage_Y = [] for length in target_lengths: # 生成当前长度的X列表 current_x = [] for idx in range(length): current_x.append(A[idx] if idx % 2 == 0 else B[idx]) storage_X.append(current_x) # 生成当前长度的Y列表 current_y = [] for idx in range(length): current_y.append(B[idx] if idx % 2 == 0 else A[idx]) storage_Y.append(current_y) # 打印验证结果 print("storage_X:") for x in storage_X: print(f"{x} len={len(x)}") print("\nstorage_Y:") for y in storage_Y: print(f"{y} len={len(y)}")
逻辑说明
- 确定长度范围:先获取原列表长度
n,计算出需要生成的最大奇数长度(若n为偶数则取n-1,奇数则取n-2),再用range生成从3开始的所有目标奇数长度。 - 生成单个列表:遍历每个目标长度,对每个位置索引判断奇偶:
- X列表:偶数索引(对应描述中的第1、3、5...位)取A的元素,奇数索引取B的元素。
- Y列表:偶数索引取B的元素,奇数索引取A的元素。
- 存储结果:将每个生成的X、Y列表分别追加到对应的存储列表中。
运行代码后,会输出符合要求的存储列表,子列表长度依次为3、5、7、9。
内容的提问来源于stack exchange,提问作者Nicholas Nicholas
相关产品推荐
相关产品推荐

