如何对列表元素进行首尾配对?附Python学生列表场景
列表首尾配对的高效实现方案
你需要将排序后的学生列表按「首-尾、次首-次尾」的规则配对,且适配任意长度的列表,以下是两种高效实现方式:
方案一:循环遍历生成配对
通过遍历列表前半部分的索引,直接取对应首尾元素组合:
slist = sorted(namesList, key=lambda x:x[-1], reverse=True) print("排序后的列表", slist) # 生成配对 pairs = [] total = len(slist) # 遍历到列表中间位置,奇数长度时中间元素与自身配对 for i in range((total + 1) // 2): pairs.append([slist[i], slist[-(i + 1)]]) print("配对结果:", pairs)
方案二:用zip+反转切片实现(更简洁)
利用zip将原列表和反转后的列表配对,再截取前半部分避免重复:
slist = sorted(namesList, key=lambda x:x[-1], reverse=True) print("排序后的列表", slist) # 生成配对 pairs = list(zip(slist, reversed(slist)))[:(len(slist)+1)//2] # 若需要将元组转为列表,可添加: # pairs = [list(pair) for pair in pairs] print("配对结果:", pairs)
修正后的完整代码
同时修正了你原代码中的拼写错误(hve→have),并整合配对逻辑:
################################### ~ 操作说明 ~ ################################### # 使用以下步骤运行代码: # 1) 输入班级学生数量 # 2) 依次输入每个学生的姓名加行为分数(例如:John5 → 姓名John,分数5) # 3) 若输入错误,输入"X"结束当前输入,需重新开始输入 studentCount = int(input("请输入班级学生数量:")) namesList = [] for i in range(studentCount): names = input("请输入学生姓名及分数:") names = names.upper() if names == 'X': print("检测到输入错误!请重新开始输入。") namesList.clear() break namesList.append(names) print("当前已输入列表:", namesList) if namesList: # 按分数从高到低排序 slist = sorted(namesList, key=lambda x:x[-1], reverse=True) print("排序后的学生列表:", slist) # 生成配对 pairs = [] total = len(slist) for i in range((total + 1) // 2): pairs.append([slist[i], slist[-(i + 1)]]) print("最终配对结果:", pairs)
内容的提问来源于stack exchange,提问作者Naga Nir
相关产品推荐
相关产品推荐

