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

识别列表是否具有相等的连续元素

周龙光
2023-03-14
问题内容

我试图确定一个大列表是否具有相同的连续元素。

所以说:

lst = [1, 2, 3, 4, 5, 5, 6]

在这种情况下,我将返回true,因为存在两个连续的元素lst[4]lst[5],它们的值相同。

我知道可以通过某种形式的循环组合来完成此操作,但我想知道是否有更有效的方法来执行此操作?


问题答案:

您可以itertools.groupby()any()
*中使用和生成器表达式:

>>> from itertools import groupby
>>> any(sum(1 for _ in g) > 1 for _, g in groupby(lst))
True

或者,您可以使用zip(),以一种更Python化的方式来检查列表中是否至少有两个相等的连续项:

>>> any(i==j for i,j in zip(lst, lst[1:])) # In python-2.x,in order to avoid creating a 'list' of all pairs instead of an iterator use itertools.izip()
True

注意:如果要检查是否有两个以上的连续相等项目,则第一种方法是好的,否则,在这种情况下,第二种方法会很容易做到!

*在内存使用方面,使用sum(1 for _ in g)而不是进行了len(list(g))非常优化(不立即读取内存中的整个列表),但是后者要快一些。



 类似资料:
  • 问题内容: 我想识别列表中的连续数字组,以便: 返回值: 并且想知道实现此目的的最佳方法是什么(特别是如果Python内置了某些东西)。 编辑:注意,我最初忘记提及个人数字应作为个人数字而不是范围返回。 问题答案: 是在4.0版中添加的。 演示版 应用此工具,我们将生成一个生成器函数来查找连续数字的范围。 所述源执行模拟一个经典配方(由@Nadia Alramli所证明)。 注意:more_ite

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

  • 问题内容: 如果您看下面的示例,我希望标头()在父容器内具有相同的长度。 但是我并没有成功实现这一目标。 任何帮助表示赞赏。 问题答案: 弹性盒法 为了使文本项()的宽度相等,您需要使用已完成的。这和说的一样。 但是,由于两个原因,这本身无法实现目标: 默认情况下,flex容器的父级,但更大容器中的flex项,仅限于其内容的宽度。因此它不会扩展,文本可能会溢出容器。你需要申请到,也是如此。 默认情

  • 问题内容: 我需要以下功能: 输入: 输出: 如果输入列表中的所有元素使用标准相等运算符求值彼此相等; 除此以外。 性能:当然,我不希望产生任何不必要的开销。 我觉得最好: 遍历列表 比较相邻元素 和AND所有结果布尔值 但我不确定最Pythonic的方法是什么。 问题答案: 通用方法: 单线: 也是单线的: 这三个版本之间的区别在于: 在内容中必须是可哈希的。 并且可以使用任何迭代器,但chec

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

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