Python:如何随降序排序的votes数组同步排序对应names数组
同步排序关联数组的解决方案
嘿,这个问题太常见啦!当你有names和votes这种索引一一对应的数组时,直接单独排序votes肯定会搞乱对应关系——核心思路就是先把两组数据绑定成配对结构,排序后再拆分回原数组类型。我给你用两种常用编程语言举个具体例子:
Python 实现
names = ["Alice", "Bob", "Charlie"] votes = [15, 25, 10] # 把票数和姓名配对成元组列表,锁死两者的关联关系 paired_data = list(zip(votes, names)) # 按票数降序排序,lambda指定以元组第一个元素(票数)为排序依据 sorted_paired = sorted(paired_data, key=lambda x: x[0], reverse=True) # 拆分回两个独立数组,zip(*)可以把配对的元组重新拆解成两组 sorted_votes, sorted_names = zip(*sorted_paired) # 如果需要列表类型(zip返回的是元组),转一下就行 sorted_names = list(sorted_names) sorted_votes = list(sorted_votes) print(sorted_names) # 输出: ['Bob', 'Alice', 'Charlie'] print(sorted_votes) # 输出: [25, 15, 10]
JavaScript 实现
const names = ["Alice", "Bob", "Charlie"]; const votes = [15, 25, 10]; // 用map生成包含姓名和对应票数的对象数组,绑定关联关系 const pairedData = names.map((name, idx) => ({ name: name, vote: votes[idx] })); // 按票数降序排序,b.vote - a.vote就是降序的规则 pairedData.sort((a, b) => b.vote - a.vote); // 从排序后的对象数组里提取出姓名和票数数组 const sortedNames = pairedData.map(item => item.name); const sortedVotes = pairedData.map(item => item.vote); console.log(sortedNames); // 输出: ['Bob', 'Alice', 'Charlie'] console.log(sortedVotes); // 输出: [25, 15, 10]
核心逻辑总结
不管用哪种语言,本质都是这三步:
- 绑定:把两个数组的对应元素打包成一个可排序的结构(元组、对象等)
- 排序:以票数为依据对这个结构数组降序排序
- 拆分:从排序后的结构里提取出姓名和票数,得到同步排序后的数组
要是用Java、C#这类静态语言,思路也一样——先定义一个包含name和vote字段的类/结构体,把数据填充进去,排序后再提取字段就行。
内容的提问来源于stack exchange,提问作者Kai Harris
相关产品推荐
相关产品推荐

