Python中按第二个索引对含NumPy数组的多元组排序问题求助
解决按元组第二个索引排序的问题
首先看你的代码,目前的核心问题是你每次循环只输出单个的最大值元组,没有把所有这些元组收集成一个统一列表,所以后续没法对整体进行排序操作。我们需要先把所有目标元组收集起来,再执行排序逻辑。
问题分析
你当前的代码中,max_values = max(results)每次仅生成单个元组并直接打印,没有存储到一个全局列表里。所以第一步要做的是创建一个容器,把每个循环产生的最大值元组都存储进去,之后再对这个容器进行排序。
修改后的完整代码
import numpy as np import random random.seed(2) np.random.seed(2) x_train = [(np.random.randn(1,3),0), (np.random.randn(1,3),1), (np.random.randn(1,3),2) , (np.random.randn(1,3),3), (np.random.randn(1,3),4), (np.random.randn(1,3),5), (np.random.randn(1,3),6) , (np.random.randn(1,3),7), (np.random.randn(1,3),8), (np.random.randn(1,3),9), (np.random.randn(1,3),10), (np.random.randn(1,3),11), (np.random.randn(1,3),12),(np.random.randn(1,3),13),(np.random.randn(1,3),14), (np.random.randn(1,3),15)] neurons = [(np.random.randn(3,1),0), (np.random.randn(3,1),1), (np.random.randn(3,1),2), (np.random.randn(3,1),3), (np.random.randn(3,1),4), (np.random.randn(3,1),5), (np.random.randn(3,1),6), (np.random.randn(3,1),7), (np.random.randn(3,1),8)] def takeSecond(elem): return elem[1] # 初始化列表,用来存储所有循环产生的最大值元组 all_max_values = [] random.shuffle(x_train) for i in range (len(x_train)): results = [] for j in range (len(neurons)): result = np.dot(x_train[i][0],neurons[j][0]) results.append((result,x_train[i][1])) max_values = max(results) # 将当前循环的最大值元组加入全局列表 all_max_values.append(max_values) # 对收集到的元组列表按第二个索引排序 all_max_values.sort(key=takeSecond) # 也可以用更简洁的匿名函数替代:all_max_values.sort(key=lambda x: x[1]) # 打印排序后的结果 print("按第二个索引递增排序后的元组:") for item in all_max_values: print(item)
关键修改说明
- 新增收集容器:创建
all_max_values = []作为全局列表,专门存储每个循环生成的最大值元组。 - 存储元组:在每次循环末尾,把当前的
max_values添加到all_max_values中,确保所有目标元组都被收集。 - 执行排序:循环结束后,对
all_max_values调用sort方法,你的takeSecond函数完全有效,也可以用匿名函数lambda x: x[1]实现相同效果,更简洁。
这样处理后,就能得到按第二个索引从0到15递增排序的元组列表了。
内容的提问来源于stack exchange,提问作者Emirhan Bilgiç
相关产品推荐
相关产品推荐

