假设我们有这个数组:
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?
答案 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")