确定列表是否具有连续的相等元素

新手上路,请多包涵

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

所以让我们说:

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

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

我知道这可能可以通过某种循环组合来完成,但我想知道是否有更有效的方法来做到这一点?

原文由 tzhu10 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

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

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

或者作为一种更 Pythonic 的方式,您可以使用 zip() ,以检查您的列表中是否至少有两个相同的连续项目:

 >>> 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

注意:当你想检查是否有超过 2 个连续相等的项目时,第一种方法很好,否则,在这种情况下,第二个会拿走蛋糕!


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

原文由 Mazdak 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用一个 简单any 条件:

 lst = [1, 2, 3, 4, 5, 5, 6]
any(lst[i]==lst[i+1] for i in range(len(lst)-1))
#outputs:
True

any 返回 True 如果任何可迭代元素是 True

原文由 Ohad Eytan 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题