首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python 3中移除列表中部分重复条目的特定实例

在Python 3中移除列表中部分重复条目的特定实例
EN

Stack Overflow用户
提问于 2020-10-26 10:05:03
回答 1查看 21关注 0票数 0

我对Python比较陌生。但是,我的需求通常只涉及对严格格式化的数据文件的简单字符串操作。我有一个特定的情况,我在网上搜索,试图解决,但一无所获。

情况就是这样。我有一个由两部分组成的条目的简单列表,格式如下:

代码语言:javascript
复制
name = ['PAUL;25', 'MARY;60', 'PAUL;40', 'NEIL;50', 'MARY;55', 'HELEN;25', ...]

而且,我只需要保留任何重复名称的一个实例(忽略‘;’右侧的数字),只保留具有最高数字的条目,以及仍然附加的最高值。所以答案应该是这样的:

代码语言:javascript
复制
ans = ['MARY;60', 'PAUL;40', 'HELEN;25', 'NEIL;50, ...]

元素在列表中的顺序是不相关的,但ans列表条目的格式必须保持不变。

我也许能想出一种暴力破解它的方法。我看过2D列表、集合、元组等,但我似乎找不到答案。名字列表大约有一百万个条目,所以我需要一些高效的条目。我相信对你们中的一些人来说,这将是非常容易的。

感谢您能提供的任何意见。

干杯。

碱土

EN

回答 1

Stack Overflow用户

发布于 2020-10-26 10:10:21

最好的数据结构可能是字典,将条目拆分(并转换为整数),然后重新连接。

如下所示:

代码语言:javascript
复制
max_score = {}
for n in name:
    person, score_str = n.split(';')
    score = int(score_str)
    if person not in max_score or max_score[person] < score:
        max_score[person] = score

ans = [
  '%s;%s' % (person, score)
  for person, score in max_score.items()
]

对于许多函数和程序来说,这是一种相当常见的结构:首先将输入转换为内部表示(在本例中,拆分并转换为整数),然后进行逻辑或计算(在本例中,为唯一性和最大值),然后转换为所需的输出表示(在本例中,字符串以;分隔)。

就效率而言,此代码先查看每个输入项一次,然后查看每个输出项一次;不太可能有比这更好的方法(当然不是正式的,也可能不是实际的)。所有的每个项目的操作都是恒定的时间和快速的。它在内存中累积中间答案(在max_score中),但这也是不可避免的;如果内存有问题,可以将输入和输出更改为迭代器/生成器,但在输出任何项之前,必须在max_score中累积整个中间答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64530643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档