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

5hcedyr0  于 2023-05-23  发布在  Python
关注(0)|答案(8)|浏览(206)

假设我们有这个数组:
arr2 = [2, 3, 1, 2, 2]
我尝试了以下方法:

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

但收到以下错误:

类型错误:“int”对象不可下标

难道我不应该使用enumerate来检查上一个索引/下一个索引吗?
我还尝试了以下方法:

for i,x in enumerate(arr2):

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

但是现在得到这个错误:

ValueError:0不在列表中

0是什么意思

qlzsbp2j

qlzsbp2j1#

你有点不清楚,但是如果你想检查前一个索引是否与下一个索引的相对值相同。Zip将允许你遍历两个列表,第一个是原始列表,第二个被切片为一个元素,因为它的第一个元素比原始列表提前一个索引,允许访问原始列表的当前和下一个索引

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

huwehgph2#

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!')

当当前值和下一个值具有相同的值时,您可以使用此函数来查找它们。

oalqel3c

oalqel3c3#

这是你想要的吗

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

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

mitkmikd4#

它接受任何可迭代的对象,包括生成器和容器(如列表),并报告两个相邻元素是否相等。

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')
gk7wooem

gk7wooem5#

可以使用zip()

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

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

输出:

TwosPair
pcww981p

pcww981p6#

为了回答您的具体问题,它所谈论的0是i在枚举生成器的第一次迭代中获得的0值,然后当它试图通过arr2.index(i)在数组中找到i时,它会抛出错误

jc3wubiy

jc3wubiy7#

我相信你的方法基本上是合理的--我们只需要稍微调整一下。首先,我们将使用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')
vbkedwbf

vbkedwbf8#

在Python中,这个需求的一个有效实现是使用itertools.groupby

from itertools import groupby

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

相关问题