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

根据序列中的缺失数字拆分列表

狄宾实
2023-03-14
问题内容

我正在寻找一种最有效的方法,根据序列中缺少的数字将数字列表分成较小的列表。例如,如果初始列表为:

seq1 = [1, 2, 3, 4, 6, 7, 8, 9, 10]

该函数将产生:

[[1, 2, 3, 4], [6, 7, 8, 9, 10]]

要么

seq2 = [1, 2, 4, 5, 6, 8, 9, 10]

会导致:

[[1, 2], [4, 5, 6], [8, 9, 10]]

问题答案:

旧Python文档中的Python
3版本代码:

>>> # Find runs of consecutive numbers using groupby.  The key to the solution
>>> # is differencing with a range so that consecutive numbers all appear in
>>> # same group.
>>> from itertools import groupby
>>> from operator import itemgetter
>>> data = [ 1,  4,5,6, 10, 15,16,17,18, 22, 25,26,27,28]
>>> for k, g in groupby(enumerate(data), lambda i_x: i_x[0] - i_x[1]):
...     print(list(map(itemgetter(1), g)))
...
[1]
[4, 5, 6]
[10]
[15, 16, 17, 18]
[22]
[25, 26, 27, 28]

groupby每当关键函数更改其返回值时,itertools模块中的函数都会生成中断。诀窍在于,返回值是列表中的数字减去列表中元素的位置。当数字中有空格时,此差异会更改。

itemgetter功能来自operator模块,您必须导入该模块和itertools模块,此示例才能正常工作。

另外,作为列表理解:

>>> [map(itemgetter(1), g) for k, g in groupby(enumerate(seq2), lambda i_x: i_x[0] - i_x[1])]
[[1, 2], [4, 5, 6], [8, 9, 10]]


 类似资料:
  • 问题内容: 我试图根据该行的单元格中的值将其分为两行。例如,我具有以下表结构(这是一个临时表,没有任何键,索引或任何其他内容,我可以在另一个临时表中选择拆分结果): 然后,应将其拆分为: 问题答案: 我将使用

  • 问题内容: 我在包含一个大字符串的表中有一个 文本 字段,我要分离的字符串的每个部分都被一个小方块分开。 搜索时,我发现这可能是一个ascii值,所以我运行了它 返回 27 如何根据此ascii值将该字段拆分为单独的字段? 预先感谢克里斯 编辑:当前数据看起来像什么的例子。如果可能的话,将TEXT放在=之前作为标题将非常有用。 ABS_ID = 1234567 PERSON_ID = 123456

  • 问题内容: 我经常碰到需要将一个序列分为满足和不满足给定谓词的两个元素子序列(保留原始的相对顺序)。 这个假设的“分割器”功能在运行中看起来像这样: 我的问题是: Python是否已经有标准/内置的方式来做到这一点? 此功能当然不难编写代码(请参阅下面的附录),但是由于多种原因,我宁愿使用标准/内置方法,也不愿使用自卷式方法。 谢谢! 附录: 到目前为止,我发现用于在Python中处理此任务的最佳

  • 我有一个数据库,其中多个变量显示为连续的行(如下所示,变量由其标记区分)。因此,它们的值在“值”列中显示为连续行。 现有表格: 对于数据分析,我需要将每个变量的值拆分为单独的列,如下所示。 下面列出了SQLite查询。我曾尝试使用分组标记并平均值,但结果变得过于细粒度,无法使用。 建议将不胜感激!

  • 问题内容: 从美学角度和性能角度来看,基于条件将项目列表拆分为多个列表的最佳方法是什么?相当于: 有没有更优雅的方法可以做到这一点? 更新:这是实际的用例,以更好地解释我正在尝试做的事情: 问题答案: 有没有更优雅的方法可以做到这一点? 该代码完全可读,而且非常清晰! 再次,这很好! 使用集合可能会稍微改善性能,但这是微不足道的差异,而且我发现列表理解要容易阅读得多,并且你不必担心顺序被弄乱了,重

  • 第一次在这里提问,所以请对我宽容一点。:)无论如何,我不确定这是否可能使用Java 8流,但我很有兴趣学习。 假设我有以下有序的数字列表: 现在,我想在元素之间的差异大于2时,将这个列表拆分为多个列表。因此,最终结果将是三个不同的列表: 我可以很容易地使用for循环并在循环时将当前元素与前一个元素进行比较来完成这个练习。然而,我想知道是否有一个简洁的方法来完成这个使用Java 8流?就像我之前说的