当前位置: 首页 > 面试题库 >

Python-识别列表中的连续数字组

隗和裕
2023-03-14
问题内容

我想识别列表中的连续数字组,以便:

myfunc([2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20])

返回值:

[(2,5), (12,17), 20]

并且想知道实现此目的的最佳方法是什么(特别是如果Python内置了某些东西)。

编辑:注意,我最初忘记提及个人数字应作为个人数字而不是范围返回


问题答案:

more_itertools.consecutive_groups 是在4.0版中添加的。

演示版

import more_itertools as mit

iterable = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
[list(group) for group in mit.consecutive_groups(iterable)]
# [[2, 3, 4, 5], [12, 13, 14, 15, 16, 17], [20]]

应用此工具,我们将生成一个生成器函数来查找连续数字的范围。

def find_ranges(iterable):
    """Yield range of consecutive numbers."""
    for group in mit.consecutive_groups(iterable):
        group = list(group)
        if len(group) == 1:
            yield group[0]
        else:
            yield group[0], group[-1]


iterable = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
list(find_ranges(iterable))
# [(2, 5), (12, 17), 20]

所述源执行模拟一个经典配方(由@Nadia Alramli所证明)。

注意:more_itertools是可通过安装的第三方软件包pip install more_itertools。



 类似资料:
  • 问题内容: 我有一个整数列表,我想生成一个包含所有连续整数列表的列表。 我有以下可行的方法,但似乎做起来很糟糕: 我已经看到其他问题,表明itertools.groupby是执行此操作的有效方法,但是我对该函数不熟悉,而且似乎在编写lambda函数来描述连续性方面遇到麻烦。 问题:是否有更好的方法(可能使用itertools.groupby?) 注意事项:full_list将具有1到59之间的整数

  • 问题内容: 我试图确定一个大列表是否具有相同的连续元素。 所以说: 在这种情况下,我将返回true,因为存在两个连续的元素和,它们的值相同。 我知道可以通过某种形式的循环组合来完成此操作,但我想知道是否有更有效的方法来执行此操作? 问题答案: 您可以在 *中使用和生成器表达式: 或者,您可以使用,以一种更Python化的方式来检查列表中是否至少有两个相等的连续项: 注意:如果要检查是否有两个以上的

  • 问题内容: 我正在读取一堆CSV文件(一段时间内水位的测量数据)以对它们进行各种分析和可视化。 由于无法控制的各种原因,这些时间序列通常缺少数据,因此我要做两件事: 我总共算他们 如果我缺少的数据多于某个阈值,则丢弃数据集: 如果NaN的数量足够少,我想用 现在要解决的是:它的月度数据,所以如果我连续有两个以上的NaN,我也想丢弃该数据,因为那将意味着我“猜测”了整个季节,甚至更多。 的文档没有真

  • 问题内容: 我有这样的df: 如果两个或两个以上连续出现in和a如果没有连续出现,我想在新列中返回a 。因此,在新列中,每一行都将基于该列中满足的此条件获得一个。我想要的输出将是: 我想我可能需要使用,但是我一直在阅读,还没有发现我需要的东西。我希望能够使用此方法来计数任意数量的连续出现,而不仅仅是2。例如,有时我需要计算10次连续出现,在这里的示例中我只使用2次。 问题答案: 你可以: 要得到:

  • 假设您在python中输入了一个数字,并且希望生成一个连续数字列表,最多为,如 你怎么能这么做?

  • 问题内容: 我有一个列表,我想找到连续元素之间的区别: 您将如何编码find_diff()函数?我可以使用“ for”迭代器对此进行编码,但是我敢肯定,有一种非常简单的方法可以使用一个简单的内衬进行编码。 问题答案: 您可以利用,并列出理解: 在性能方面,似乎并没有太大的差异: