Python-如何检查列表中的下一个值是否与上一个相同?

时间:2020-07-26 00:42:29

标签: python python-3.x list next

假设我们有这个数组:

arr2 = [2, 3, 1, 2, 2]

我尝试了以下操作:

for i,x in enumerate(arr2):
 
    if x == 2 and x[i+1] == 2:
 
        print('TwosPair')

但是收到以下错误:

TypeError:“ int”对象不可下标

我不能使用枚举检查上一个/下一个索引吗?

我还尝试了以下方法:

for i,x in enumerate(arr2):

    if x == 2 and x[arr2.index(i)+1] == 2:
 
        print('TwosPair')

但是现在出现此错误:

ValueError:列表中没有0

它在说什么0?

8 个答案:

答案 0 :(得分:3)

您不清楚,但是是否要检查上一个索引是否与下一个相对索引相同。 Zip将允许您遍历两个列表,第一个是原始列表,第二个被切成一个元素,因为它的第一个项目比原始列表领先一个索引,从而可以访问原始列表的当前和下一个索引

    def TwosPair(list_1):
        for curr, next in zip(list_1, list_1[1:]): 
            if curr == 2 and next == 2: print('TwosPair')


    

答案 1 :(得分:2)

arr2 = [2, 3, 3, 1, 2, 2, 9, 4, 4]

for i in range(len(arr2)-1):
    if arr2[i] == arr2[i+1]:
        print('Same next & current values!')

当两个值都相同时,您可以使用它来查找当前值和下一个值。

答案 2 :(得分:1)

这是您需要的吗?

arr2 = [2, 3, 1, 2, 2]

for i,x in enumerate(arr2):
    if i < len(arr2)-1 and arr2[i+1] == x:
        print('TwosPair')

答案 3 :(得分:1)

这可以接受任何迭代, 包括生成器和容器,例如列表, 并报告两个相邻元素是否相等。

from typing import Iterable


def has_adjacent_dup(a: Iterable):
    sentinel = object()  # might use None if None won't appear in input
    prev = sentinel
    for i in a:
        if prev == i:
            return True
        prev = i
    return False


if has_adjacent_dup(arr2):
    print('Pair')

答案 4 :(得分:1)

您可以使用zip()

arr2 = [2, 3, 1, 2, 2]

for x,y in zip(arr2,arr2[1:]):
    if x == y == 2:
        print('TwosPair')

输出:

TwosPair

答案 5 :(得分:1)

要回答您的特定问题,它所说的0是我在枚举生成器的第一次迭代中采用的0值,然后当它尝试通过arr2.index(i)在数组中找到i时,会引发错误

答案 6 :(得分:0)

我相信您的方法基本上是正确的-我们只需要稍微调整一下即可。首先,我们将使用enumerate()的第二个参数将其生成的值用作下一个索引。其次,我们将把数组循环限制为除最后一项以外的所有内容,这样我们就不会溢出数组索引。最后,我们将使用一些有趣的Python语法来简化测试:

array = [2, 3, 1, 2, 2]

for next_index, element in enumerate(array[:-1], 1):

    if element == 2 == array[next_index]:

        print('TwosPair')

答案 7 :(得分:0)

在Python中此要求的一种有效实现是使用itertools.groupby

from itertools import groupby

for k, g in groupby(arr):
    if k == 2:
       next(g)
       for _ in g:
           print("TwosPair")