如何从数组列表拼接数组?Python脚本仅输出最后元素问题
问题分析与修复
原代码的核心问题是循环逻辑错误,加上不必要的重复导入,导致最终只保留了最后一次循环的结果:
import numpy as np被放在循环内部,每次循环都会重复导入,完全没有必要,应该移到代码最开头。- 循环
for k in range(len(a))中,每次都会重新生成包含所有(i,j)组合的数组,且所有组合的第三个元素都被设为当前的a[k],循环结束后array变量只会保留最后一次循环生成的结果(也就是a最后一个元素对应的数组)。
修复后的代码
方法一:利用zip配对组合
import numpy as np a = [0.1, 0.2, 0.43, 0.44, 0.55, 0.36, 0.57, 0.58, 0.39, 0.40] # 先生成所有(i,j)的配对列表 pairs = [[i, j] for i in range(1, 5) for j in range(i + 1, 6)] # 将每个配对与a中对应的元素组合,再转为numpy数组 result = np.array([pair + [val] for pair, val in zip(pairs, a)]) print(result)
方法二:手动索引遍历
import numpy as np a = [0.1, 0.2, 0.43, 0.44, 0.55, 0.36, 0.57, 0.58, 0.39, 0.40] array_list = [] idx = 0 for i in range(1, 5): for j in range(i + 1, 6): array_list.append([i, j, a[idx]]) idx += 1 array = np.array(array_list) print(array)
输出结果
运行上述代码后,会得到你预期的输出:
array([[ 1. , 2. , 0.1 ], [ 1. , 3. , 0.2 ], [ 1. , 4. , 0.43], [ 1. , 5. , 0.44], [ 2. , 3. , 0.55], [ 2. , 4. , 0.36], [ 2. , 5. , 0.57], [ 3. , 4. , 0.58], [ 3. , 5. , 0.39], [ 4. , 5. , 0.4 ]])
内容的提问来源于stack exchange,提问作者user15708301
相关产品推荐
相关产品推荐

