将连续整数分组在一起

2024-04-11

有以下代码:

import sys


ints = [1,2,3,4,5,6,8,9,10,11,14,34,14,35,16,18,39,10,29,30,14,26,64,27,48,65]
ints.sort()
ints = list(set(ints))

c = {}

for i,v in enumerate(ints):

    if i+1 >= len(ints):
        continue

    if ints[i+1] == v + 1 or ints[i-1] == v - 1:

        if len(c) == 0:
            c[v] = [v]
            c[v].append(ints[i+1])
        else:
            added=False
            for x,e in c.items():
                last = e[-1]
                if v in e:
                    added=True
                    break

                if v - last == 1:
                    c[x].append(v)
                    added=True

            if added==False:
                c[v] = [v]
    else:
        if v not in c:
            c[v] = [v]



print('input ', ints)
print('output ', c))

目标:

给定一个整数列表,创建一个字典,其中包含分组在一起的连续整数,以减少列表的总长度。

这是我当前解决方案的输出:

input  [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 14, 16, 18, 26, 27, 29, 30, 34, 35, 39, 48, 64, 65]
output  {1: [1, 2, 3, 4, 5, 6], 8: [8, 9, 10, 11], 14: [14], 16: [16], 18: [18], 26: [26, 27], 29: [29, 30], 34: [34, 35], 39: [39], 48: [48], 64: [64]}

条件/限制:

  • 如果当前整数是 a) 在现有列表中或 b) 是现有列表中的最后一项,我们不想为此项目创建另一个列表。 即在 1-5 范围内(含),当我们到达3,不创建列表3,4,而是附加3到现有列表[1,2]

我当前的迭代工作正常,但列表越大,它的速度就会呈指数级减慢,因为for x,e in c.items()现有清单检查。

我怎样才能在达到相同结果的同时加快速度?

新解决方案(使用 19,000 个整数的输入列表从 13 秒缩短到 0.03 秒):

c = {}

i = 0

last_list = None

while i < len(ints):
    cur = ints[i]

    if last_list is None:
        c[cur] = [cur]
        last_list = c[cur]

    else:

        if last_list[-1] == cur-1:
            last_list.append(cur)
        else:
            c[cur] = [cur]
            last_list = c[cur]

    i += 1

由于您有连续数字的列表,我建议您使用range对象而不是lists:

d, head = {}, None
for x in l:
    if head is None or x != d[head].stop:
        head = x
    d[head] = range(head, x+1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将连续整数分组在一起 的相关文章

  • 从 Python 中的 message_from_string() 获取发件人地址

    有人可以告诉我如何在Python中从email message from string 获取发件人地址吗 谢谢 我试过 message email message from string email text from message Fr
  • Pandas ParserError:标记数据时出错。 C 错误:字符串内有 EOF

    我的数据超过 400 000 行 运行此代码时 f pd read csv filename error bad lines False 我收到以下错误 pandas errors ParserError Error tokenizing
  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如
  • 使用 pyppeteer 与 asyncio 关联来抓取内容

    我用 python 结合编写了一个脚本pyppeteer随着asyncio从其登陆页面抓取不同帖子的链接 并最终通过跟踪通向其内页的 url 来获取每个帖子的标题 我这里解析的内容不是动态的 但是 我利用了pyppeteer and asy
  • 嵌套函数中的变量作用域

    有人可以解释为什么以下程序失败 def g f for in range 10 f def main x 10 def f print x x x 1 g f if name main main 带有消息 Traceback most re
  • 用于读取类似 CSV 行的 Python 正则表达式

    我想解析传入的类似 CSV 的数据行 值用逗号分隔 逗号周围可能有前导和尾随空格 并且可以用 或 引用 例如 这是有效的行 data1 data2 data3 data4 data5 但这是格式错误的 data1 data2 da ta3
  • 使用python编辑html,但是lxml将漂亮的html实体转换为奇怪的编码

    我正在尝试使用 python 带有 pyquery 和 lxml 来更改和清理一些 html Eg html div p It 146 s a spicy meatball p div lxml html clean 函数 clean ht
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • python win32com.client 调整窗口大小

    我正在使用 Python 3 4 1 通过 win32com client 控制 Windows 应用程序 我可以激活它 我可以发送击键 点击等 现在我想知道是否有办法调整窗口大小并将其设置到特定位置 我找不到方法 这里有一些代码片段 所以
  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • pandas DataFrame 中行的高效成对比较

    我目前正在处理一个较小的数据集 大约 900 万行 不幸的是 大多数条目都是字符串 即使强制类别 框架在内存中也只有几 GB 我想做的是将每一行与其他行进行比较 并对内容进行直接比较 例如 给定 A B C D 0 cat blue old
  • Plotly:如何设置文本格式(下划线、粗体、斜体)

    使用注释时 我尝试在绘图中为文本添加下划线 我使用添加注释 import plotly graph objects as go g go FigureWidget make subplots rows 1 cols 1 g update l
  • Python 模块 BeautifulSoup 提取锚点 href

    我正在使用 BeautifulSoup 模块通过以下方式从 html 选择所有 href def extract links html soup BeautifulSoup html anchors soup findAll a print
  • 如何在 tkinter 后台运行函数[重复]

    这个问题在这里已经有答案了 我是 GUI 编程新手 我想用 tkinter 编写一个 Python 程序 我想要它做的就是在后台运行一个可以通过 GUI 影响的简单函数 该函数从 0 计数到无穷大 直到按下按钮为止 至少这是我想要它做的 但
  • 如何在使用 Flask for Python 3 的同时使用 Bootstrap 4?

    我检查过 发现默认安装时 Flask Bootstrap 原生使用 Bootstrap 3 3 7 但实际上我想通过使用 Flask Bootstrap 包在我的项目中使用 Bootstrap 4 任何有关如何更新它或类似内容的帮助将不胜感
  • Pandas 根据条件替换数据框值

    我有一个主数据框 df Colour Item Price Blue Car 40 Red Car 30 Green Truck 50 Green Bike 30 然后我有一个价格修正数据框 df pc Colour Item Price
  • 在基本 Tensorflow 2.0 中运行简单回归

    我正在学习 Tensorflow 2 0 我认为在 Tensorflow 中实现最基本的简单线性回归是一个好主意 不幸的是 我遇到了几个问题 我想知道这里是否有人可以提供帮助 考虑以下设置 import tensorflow as tf 2
  • model.predict() 返回类而不是概率

    Hello 我是第一次使用 Keras 我训练并保存了一个模型 作为 json 文件及其权重 该模型旨在将图像分为 3 个类别 我的编译方法 model compile loss categorical crossentropy optim
  • python 中“重载”函数的最佳方法? [复制]

    这个问题在这里已经有答案了 我正在尝试在 python 中做这样的事情 def foo x y do something at position x y def foo pos foo pos x pos y 所以我想根据我提供的参数数量调
  • Python 子进程:无法转义引号

    我知道以前曾问过类似的问题 但它们似乎都是通过重新设计参数的传递方式 即使用列表等 来解决的 但是 我这里有一个问题 因为我没有这个选项 有一个特定的命令行程序 我使用的是 Bash shell 我必须向其传递带引号的字符串 它不能不被引用

随机推荐

  • 如何读取文件中的数据,并将其传递给结构〜> C

    好的 我的主目录中有一个名为 Graduates txt 的文件 我有一个便携式程序来查找主目录 然后我打开该文件进行读取 文件中的数据看起来像这样 year firstName lastName 我需要从该文件中获取这些数据 并将其分离到
  • 了解 Elm 中的通用联合类型

    我无法理解到底是什么Html msg类型是什么 或者它如何使用 我在 VirtualDom elm 中找到了这行代码 其中Html msg似乎是以下别名 type Node msg Node 这看起来像一个带有一个类型参数的通用联合类型 m
  • spring-form:带有枚举的选项标签

    我在显示具有正确值的下拉列表时遇到问题 我正在使用
  • 正则表达式解析类似 Javascript 函数调用的语法

    我有以下数据可能性 fnname fnname value fnname value valueN 我需要一种方法用 javascript 正则表达式解析它以获得数组 fnname fnname value fnname value val
  • C#/.Net 中的缓存

    我想问你在 C 中实现缓存的最佳方法是什么 是否有可能使用给定的 NET 类或类似的东西 也许像字典这样的东西会删除一些条目 如果它变得太大 但是哪些条目不会被垃圾收集器删除呢 如果您使用 NET 4 或更高版本 则可以使用内存缓存 htt
  • 使用不同的应用程序对 git 中的 diff 输出进行着色

    我想用cdiff https pypi python org pypi cdiff使用 git 时对差异输出进行着色 我可以通过 cdiff 传递 git 命令的输出 但我想知道是否可以不必这样做 具体来说 当我使用git log p 当我
  • 在具有整数和字符变量的数据框上按行应用 FUN

    一个完全基本的问题 如果重复 请原谅我 set seed 1 df lt data frame id c a a b b a a sample 1 10 size 5 replace T b sample 1 10 size 5 repla
  • 在已安装应用程序的情况下运行 inno setup 时卸载

    我刚刚开始使用 inno setup 看起来效果很好 但是 当我运行已安装的应用程序的安装程序时 它会重新安装 我想给用户卸载 这可能吗 如果可以 该怎么做 具体来说 我为家庭作业编写了一个游戏 我使用 inno setup 制作了一个安装
  • 为什么 getCompatedStyle 不为父元素隐藏的元素返回 display:none ?

    根据这个问题 https stackoverflow com q 1169967 798371页面和接受的答案here https stackoverflow com q 4866229 798371 通过Javascript获取继承的CS
  • 更改货币符号或将其在 inputmask 货币中删除

    我在用着Robin Herbot 的 inputmask jquery 插件 https github com RobinHerbots jquery inputmask我想将默认货币符号 默认情况下为美元货币符号 更改为 PESO 货币符
  • 如何使用 PHP 下载 HTML?

    如何从 PHP 中的 URL 下载 HTML 文件 并下载所有依赖项 例如 CSS 和图像 并将它们作为文件存储到我的服务器 我的要求是不是太多了 最简单的方法是使用wget http en wikipedia org wiki Wget
  • 如何从 PHP 数组为下拉选择字段创建嵌套列表?

    我的问题与本主题中描述的问题非常相似从 PHP 数组创建下拉选择字段的嵌套列表 https stackoverflow com questions 14613546 create nested list from php array for
  • 如何使用 Android Studio Arctic Fox 将 Android 库 aar 作为模块导入?

    我曾经能够将库 aar 文件导入为模块 https stackoverflow com a 34919810 355456他们一直工作得很好 我不知道如何使用最新版本的 Android Studio Arctic Fox 来做到这一点 有人
  • 从数据框中删除所有值为 NA、NULL 或空的列[重复]

    这个问题在这里已经有答案了 我有一个数据框 其中一些值为 NULL 或空 我想remove these columns其中所有值 are NULL or empty 应从数据框中删除列 而不仅仅是隐藏列 我的头 df 看起来像 data V
  • nginx + python + websocket

    我如何配置nginx 最新版本 他们说它支持websockets 来支持WebSockets 我如何使用 python 来运行 websockets 连接 这就是我想要的 客户端使用 JavaScript 创建 WebSocket webs
  • 自动调整 NumPy 重新数组的大小

    我想创建 numpy recarray 的子类 当数据添加到当前长度之外的行时 它会自动调整大小 下面的代码完成了我想要的大部分功能 class autorecarray numpy recarray def init self args
  • p:对话框在验证失败时不隐藏

    我遇到无法关闭 PrimeFaces 对话框的问题 输入字段 用户名 是必需的
  • 单个 Django 模型,多个表?

    我在 MySQL 数据库中有几个临时表 它们共享相同的架构并具有动态名称 我将如何使用 Django 与这些表交互 单个模型可以从多个表中提取数据吗 我相信 您可以创建一个工厂函数 该函数会以动态方式返回您的模型db table http
  • Magento - 没有新闻通讯订阅和取消订阅事件

    为什么在客户或新闻通讯模块中的新闻通讯订阅 取消订阅过程中或周围没有调度任何事件 我目前面临的唯一选择是使用订阅者模型的重写来适应这里的一些代码 有没有其他人有一个好的替代方案 或者我错过了什么 我遇到了需要监听订阅 取消订阅事件的情况 我
  • 将连续整数分组在一起

    有以下代码 import sys ints 1 2 3 4 5 6 8 9 10 11 14 34 14 35 16 18 39 10 29 30 14 26 64 27 48 65 ints sort ints list set ints