You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对列表元素进行首尾配对?附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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:21:51