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

Python生成无重复新列表 其余关联列表与首个去重列表对齐

关联列表去重对齐实现方案

问题核心要求

处理三组索引一一对应的关联列表:

  • NamesFromForum:存在重复姓名的用户名列表
  • AgesFromForum:和姓名列表索引对应的年龄列表
  • LocFromForum:和姓名列表索引对应的所在地列表
    需要生成三组顺序严格对齐的新列表:
  • 去重后无重复的姓名列表,保留姓名首次出现的顺序
  • 对齐后的年龄列表,每个位置对应同索引姓名首次出现时的年龄值
  • 对齐后的所在地列表,每个位置对应同索引姓名首次出现时的所在地值

常见错误原因

之前代码运行后年龄、所在地列表为空,基本是两个原因:

  1. 遍历去重时仅单独处理了姓名字段,没有同步追加对应位置的年龄、所在地数据
  2. 遍历过程中没有同步获取元素索引,无法定位到对应位置的年龄、所在地值

可直接运行的正确实现

基础兼容写法(全Python版本通用)

用enumerate遍历同时拿到索引和姓名,首次遇到新姓名时,同步追加三个列表的对应值:

# 原始测试数据示例
NamesFromForum = ["张三", "李四", "王五", "张三", "赵六", "李四", "孙七"]
AgesFromForum = [22, 25, 30, 23, 28, 26, 31]
LocFromForum = ["北京", "上海", "广州", "深圳", "杭州", "南京", "成都"]

seen = set()
unique_names = []
aligned_ages = []
aligned_locs = []

for idx, name in enumerate(NamesFromForum):
    if name not in seen:
        seen.add(name)
        unique_names.append(name)
        aligned_ages.append(AgesFromForum[idx])
        aligned_locs.append(LocFromForum[idx])

简洁写法(适配Python3.7+,字典默认保留插入顺序)

用字典自动去重,键存姓名,值存首次出现时对应的年龄和所在地,最后拆分字典即可:

name_info = {}
for name, age, loc in zip(NamesFromForum, AgesFromForum, LocFromForum):
    if name not in name_info:
        name_info[name] = (age, loc)

unique_names = list(name_info.keys())
aligned_ages = [age for age, loc in name_info.values()]
aligned_locs = [loc for age, loc in name_info.values()]

结果验证

运行后输出结果完全符合对齐要求:

去重姓名列表: ['张三', '李四', '王五', '赵六', '孙七']
对齐年龄列表: [22, 25, 30, 28, 31]
对齐所在地列表: ['北京', '上海', '广州', '杭州', '成都']

注意:如果原始三个列表长度不一致,建议先加长度校验逻辑,避免索引越界。

内容的提问来源于stack exchange,提问作者Jay Van

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:54:22