过滤在非常大的列表中仅出现一次的项目

2024-01-02

我有一个很大的列表(超过 1,000,000 个项目),其中包含英语单词:

tokens = ["today", "good", "computer", "people", "good", ... ]

我想获取列表中仅出现一次的所有项目

现在我正在使用:

tokens_once = set(word for word in set(tokens) if tokens.count(word) == 1)

但它真的很慢。我怎样才能让它更快?


您迭代一个列表,然后对每个元素重复一次,这使得它的复杂度为 O(N²)。如果您更换您的count by a Counter,您对列表进行一次迭代,然后再次对唯一元素的列表进行迭代,这使得在最坏的情况下,它的复杂度为 O(2N),即 O(N)。

from collections import Counter

tokens = ["today", "good", "computer", "people", "good"]
single_tokens = [k for k, v in Counter(tokens).iteritems() if v == 1 ]
# single_tokens == ['today', 'computer', 'people']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过滤在非常大的列表中仅出现一次的项目 的相关文章

随机推荐

  • MongoDB 文本索引错误:不支持语言覆盖

    我使用的是2 6 1版本 我正在尝试创建文本索引 但出现错误 connectionId 4932 err language override unsupported en US code 17262 n 0 ok 1 正在搜索的文档有一个值
  • 合并 k 个排序链表 - 分析

    我正在考虑针对一个问题的不同解决方案 假设我们有 K 个已排序的链表 并且我们将它们合并为一个 所有这些列表总共有 N 个元素 众所周知的解决方案是使用优先级队列并从每个列表中弹出 推送第一个元素 我可以理解为什么它需要O N log K
  • Python在for循环中创建对象

    我有一个类来分配一些参数 class body def init self name number L self name name self number number self L L 我想将这些参数分配给 10 个几乎相等的物体 例如
  • Clojure 从 zipmap 中获得最高价值

    所以我在这里得到了我建议的邮政地图 它工作得很好 正如你所看到的 我已经加载了数据 这就是 repl 中的样子 非常完美 这是地图 Year 2020 Day 27 January 59 February 38 Year 2020 Day
  • SSIS Foreach 循环文件夹作为变量

    我需要将 Foreach 循环中的文件夹设置为可变位置 我尝试将位置添加到我的包配置中 它的表现就像它工作一样 但是当我打开配置文件时 它不在那里 我将其设置为 Foreach File Enumerator 并对路径进行硬编码 并检索完全
  • Laravel 9 - 在 artisan 路线中显示中间件:列表

    如何显示 Laravel 路由中使用的中间件 php artisan route list 我找到了显示方式 只需添加详细选项 php artisan route list v
  • Windows DPI 设置影响 Graphics.DrawString

    我已经创建了一个新的 Bitmap 对象 现在想要使用 GDI 向其绘制一些文本 所以我调用 Graphics DrawString 问题是字符串的大小取决于 Windows 7 的 DPI 设置 有什么方法可以使我的文本绘制独立于 Win
  • 在 Django 之外运行 Python 脚本

    我有一个使用 Django ORM 功能以及其他外部库的脚本 我想在 Django 之外运行该脚本 即从命令行执行 编辑 目前 我可以通过导航到 URL 来启动它 我该如何为此设置环境 最简单的方法是将脚本设置为manage py子命令 这
  • ::伪元素堆叠顺序问题之前

    静态定位时 before 伪元素堆叠 z index 在子元素的内容之前 但在子元素的背景之后 任何人都可以解释为什么甚至是如何发生这种情况 或者这是否是所有主要浏览器都存在的问题 div div
  • 如何通过.net core使用微软报告服务

    我有兴趣在我的 vue js net core 项目中使用报告服务 我不需要reportviewer 控件 只需执行适当的代码来远程处理它 以将其作为字节流返回到 pdf 中 我以前的代码在 ASP net MVC angularjs 项目
  • Angular.js 数据访问器

    我正在尝试学习 Angular 但我陷入了以下困境 我有 PHP 背景 主要使用 Laravel 在 Laravel 中您可以在模型中使用访问器 所以如果你有一个模型User 其中有一个firstname and lastname 您可以创
  • 处理无序执行

    我最近偶然发现了这个维基百科文章 http en wikipedia org wiki Memory barrier 根据我的多线程经验 我意识到程序能够随时在线程之间切换线程而导致的众多问题 然而 我从来不知道编译器和硬件优化可以以保证适
  • 将 SecureString 放入 PasswordBox

    我有一个现有的安全字符串 http msdn microsoft com en us library system security securestring 28v vs 110 29 aspx我想放入一个密码盒 http msdn mi
  • Ruby on Rails 每次都会触发序列化属性的更新

    我有一个带有名称和设置的简单用户模型 用户每次保存后 AREL 都会对设置列执行更新 例如 user User find by name kevin user save 0 3ms UPDATE users SET updated at 2
  • VSCode 自动完成函数 * 和方法 * 括号 (js/ts)

    这是一个超集VSCode 自动补全函数时添加括号 https stackoverflow com questions 55533379 vscode add parentheses when automcompleting function
  • 强制 Renderscript 在 CPU 或 GPU 上运行(至少用于性能调整目的)

    我有几个basic算法 DCT IDCT 和其他一些 在 Nexus 10 上移植并工作 至少在功能上符合预期 由于这些算法是首次实现 因此它们的执行时间目前已达到几秒 这是可以理解的 然而 考虑到 Renderscript 的架构 我发现
  • WebDriverException:消息:服务 /content/chromedriver 意外退出。状态代码为:-6(使用 ChromeDriver Google Colab 和 Selenium)

    我试图使用 Selenium 运行无头 Chrome 浏览器来从网络上抓取内容 我使用 wget 安装了 headless Chrome 然后将其解压到当前文件夹中 wget http chromedriver storage google
  • 使用 C# 在两个线程之间来回传递数据的推荐方法是什么

    我正在尝试制作一个应用程序 它将使用套接字在两个服务器 Connection1 和 Conenction2 之间传递数据 我想做的是从 Connection1 接收数据并将其传递给 Connection2 反之亦然 Connection1
  • 电子和打字稿“找不到模块‘电子’”

    关于https electron atom io blog 2017 06 01 typescript https electron atom io blog 2017 06 01 typescript电子支持打字稿 但在我的设置中不起作用
  • 过滤在非常大的列表中仅出现一次的项目

    我有一个很大的列表 超过 1 000 000 个项目 其中包含英语单词 tokens today good computer people good 我想获取列表中仅出现一次的所有项目 现在我正在使用 tokens once set wor